//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
#define file "o"
#define ff(i, a, b) for (auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for (auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r) { return uniform_int_distribution<ll>(l, r)(rng); }
inline void rf() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
if (fopen(file".inp","r")) {
freopen(file".inp","r",stdin);
freopen(file".out","w",stdout);
}
}
const int mod=1e9+19972207;
const int maxn=3e4+15;
const ll inf=1e16;
template<typename T> inline void add(T &x, const T &y)
{
x+=y;
if(x>=mod) x-=mod;
if(x<0) x+=mod;
}
template<typename T> inline bool maxi(T &a, T b)
{
if(a>=b) return 0;
a=b; return 1;
}
template<typename T> inline bool mini(T &a, T b)
{
if(a<=b) return 0;
a=b; return 1;
}
struct Upd {
int xa, ya, xb, yb, t;
ll w;
};
int main() {
rf();
int K, P;
if(!(cin >> K >> P)) return 0;
vector<Upd> ups(P);
int maxT = 0;
vector<vector<ll>> D(K+3, vector<ll>(K+3, 0));
ff(i,0,P-1){
int xa, ya, xb, yb, t; ll w;
cin >> xa >> ya >> xb >> yb >> t >> w;
if(xa>xb) swap(xa,xb);
if(ya>yb) swap(ya,yb);
ups[i] = {xa,ya,xb,yb,t,w};
maxT = max(maxT, t);
D[xa][ya] += w;
D[xb+1][ya] -= w;
D[xa][yb+1] -= w;
D[xb+1][yb+1] += w;
}
vector<vector<ll>> S(K+2, vector<ll>(K+2,0));
ff(x,1,K){
ll run=0;
ff(y,1,K){
run += D[x][y];
S[x][y] = S[x-1][y] + run;
}
}
vector<vector<int>> byT(maxT+1);
ff(i,0,P-1) byT[ups[i].t].push_back(i);
const int B = 32;
int BX = (K + B - 1) / B, BY = (K + B - 1) / B;
struct BlockInfo {
int cand = 0;
ll bal = 0;
vector<int> border;
};
vector<vector<BlockInfo>> blk(BX, vector<BlockInfo>(BY));
auto blockBounds = [&](int bx, int by) {
int xl = bx*B + 1, xr = min(K, (bx+1)*B);
int yl = by*B + 1, yr = min(K, (by+1)*B);
return array<int,4>{xl,yl,xr,yr};
};
auto fullyCover = [&](const Upd& u, int bx, int by)->bool{
auto b = blockBounds(bx,by);
return (u.xa <= b[0] && b[2] <= u.xb && u.ya <= b[1] && b[3] <= u.yb);
};
auto overlap = [&](const Upd& u, int bx, int by)->bool{
auto b = blockBounds(bx,by);
if (u.xa > b[2] || u.xb < b[0] || u.ya > b[3] || u.yb < b[1]) return false;
return true;
};
for(int i=0;i<P;++i){
const auto &u = ups[i];
int bx1 = (u.xa-1)/B, bx2 = (u.xb-1)/B;
int by1 = (u.ya-1)/B, by2 = (u.yb-1)/B;
for(int bx=bx1; bx<=bx2; ++bx){
for(int by=by1; by<=by2; ++by){
if(fullyCover(u,bx,by)){
auto &bi = blk[bx][by];
if(bi.cand==u.t){ bi.bal += u.w; }
else{
if(bi.bal >= u.w) bi.bal -= u.w;
else { bi.cand = u.t; bi.bal = u.w - bi.bal; }
}
}else if(overlap(u,bx,by)){
blk[bx][by].border.push_back(i);
}
}
}
}
vector<vector<int>> ans(K+1, vector<int>(K+1, 0));
for(int bx=0; bx<BX; ++bx){
for(int by=0; by<BY; ++by){
auto b = blockBounds(bx,by);
int xl=b[0], yl=b[1], xr=b[2], yr=b[3];
int nx = xr-xl+1, ny = yr-yl+1;
vector<int> candList;
{
unordered_set<int> seen;
if(blk[bx][by].cand) { seen.insert(blk[bx][by].cand); candList.push_back(blk[bx][by].cand); }
for(int id: blk[bx][by].border){
int t = ups[id].t;
if(!seen.count(t)){ seen.insert(t); candList.push_back(t); }
}
}
if(candList.empty()){
ff(x,xl,xr) ff(y,yl,yr) ans[x][y]=0;
continue;
}
ff(x,xl,xr) ff(y,yl,yr) ans[x][y]=0;
for(int t : candList){
vector<vector<ll>> Dloc(nx+2, vector<ll>(ny+2, 0));
ll baseAll = 0;
for(int id : byT[t]){
const auto &u = ups[id];
if(u.xa>xr || u.xb<xl || u.ya>yr || u.yb<yl) continue;
if(u.xa<=xl && xr<=u.xb && u.ya<=yl && yr<=u.yb){
baseAll += u.w;
}else{
int xa=max(u.xa,xl), xb=min(u.xb,xr);
int ya=max(u.ya,yl), yb=min(u.yb,yr);
int x1=xa-xl+1, x2=xb-xl+1;
int y1=ya-yl+1, y2=yb-yl+1;
Dloc[x1][y1] += u.w;
Dloc[x2+1][y1] -= u.w;
Dloc[x1][y2+1] -= u.w;
Dloc[x2+1][y2+1] += u.w;
}
}
for(int i=1;i<=nx;++i){
for(int j=1;j<=ny;++j){
Dloc[i][j] += Dloc[i-1][j] + Dloc[i][j-1] - Dloc[i-1][j-1];
}
}
bool anySet = false;
for(int i=1;i<=nx;++i){
for(int j=1;j<=ny;++j){
int x = xl + i - 1;
int y = yl + j - 1;
if(ans[x][y]) continue;
ll Ec = baseAll + Dloc[i][j];
if( Ec*2 > S[x][y] ){
ans[x][y] = t;
anySet = true;
}
}
}
}
}
}
ff(x,1,K){
ff(y,1,K){
if(y>1) cout << ' ';
cout << ans[x][y];
}
cout << '\n';
}
return 0;
}
Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAibyIKI2RlZmluZSBmZihpLCBhLCBiKSBmb3IgKGF1dG8gaT0oYSk7IGk8PShiKTsgKytpKQojZGVmaW5lIGZmcihpLCBiLCBhKSBmb3IgKGF1dG8gaT0oYik7IGk+PShhKTsgLS1pKQojZGVmaW5lIG5sICJcbiIKI2RlZmluZSBzcyAiICIKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHN6KHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBhbGwocykgKHMpLmJlZ2luKCksIChzKS5lbmQoKQojZGVmaW5lIG1zKGEseCkgbWVtc2V0KGEsIHgsIHNpemVvZiAoYSkpCiNkZWZpbmUgY24gY29udGludWUKI2RlZmluZSByZSBleGl0KDApCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsbGw+IHBsbDsKdHlwZWRlZiB2ZWN0b3I8cGlpPiB2cGlpOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZwbGw7CgptdDE5OTM3XzY0IHJuZyhjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwpsbCByYW4obGwgbCwgbGwgcikgeyByZXR1cm4gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGxsPihsLCByKShybmcpOyB9CgppbmxpbmUgdm9pZCByZigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsgY291dC50aWUobnVsbHB0cik7CiAgICBpZiAoZm9wZW4oZmlsZSIuaW5wIiwiciIpKSB7CiAgICAgICAgZnJlb3BlbihmaWxlIi5pbnAiLCJyIixzdGRpbik7CiAgICAgICAgZnJlb3BlbihmaWxlIi5vdXQiLCJ3IixzdGRvdXQpOwogICAgfQp9Cgpjb25zdCBpbnQgbW9kPTFlOSsxOTk3MjIwNzsKY29uc3QgaW50IG1heG49M2U0KzE1Owpjb25zdCBsbCBpbmY9MWUxNjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChUICZ4LCBjb25zdCBUICZ5KQp7CiAgICB4Kz15OwogICAgaWYoeD49bW9kKSB4LT1tb2Q7CiAgICBpZih4PDApIHgrPW1vZDsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWF4aShUICZhLCBUIGIpCnsKICAgIGlmKGE+PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWluaShUICZhLCBUIGIpCnsKICAgIGlmKGE8PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKc3RydWN0IFVwZCB7CiAgICBpbnQgeGEsIHlhLCB4YiwgeWIsIHQ7CiAgICBsbCB3Owp9OwoKaW50IG1haW4oKSB7CiAgICByZigpOwoKICAgIGludCBLLCBQOwogICAgaWYoIShjaW4gPj4gSyA+PiBQKSkgcmV0dXJuIDA7CgogICAgdmVjdG9yPFVwZD4gdXBzKFApOwogICAgaW50IG1heFQgPSAwOwoKICAgIHZlY3Rvcjx2ZWN0b3I8bGw+PiBEKEsrMywgdmVjdG9yPGxsPihLKzMsIDApKTsKCiAgICBmZihpLDAsUC0xKXsKICAgICAgICBpbnQgeGEsIHlhLCB4YiwgeWIsIHQ7IGxsIHc7CiAgICAgICAgY2luID4+IHhhID4+IHlhID4+IHhiID4+IHliID4+IHQgPj4gdzsKICAgICAgICBpZih4YT54Yikgc3dhcCh4YSx4Yik7CiAgICAgICAgaWYoeWE+eWIpIHN3YXAoeWEseWIpOwogICAgICAgIHVwc1tpXSA9IHt4YSx5YSx4Yix5Yix0LHd9OwogICAgICAgIG1heFQgPSBtYXgobWF4VCwgdCk7CgogICAgICAgIERbeGFdW3lhXSAgICAgKz0gdzsKICAgICAgICBEW3hiKzFdW3lhXSAgIC09IHc7CiAgICAgICAgRFt4YV1beWIrMV0gICAtPSB3OwogICAgICAgIERbeGIrMV1beWIrMV0gKz0gdzsKICAgIH0KCiAgICB2ZWN0b3I8dmVjdG9yPGxsPj4gUyhLKzIsIHZlY3RvcjxsbD4oSysyLDApKTsKICAgIGZmKHgsMSxLKXsKICAgICAgICBsbCBydW49MDsKICAgICAgICBmZih5LDEsSyl7CiAgICAgICAgICAgIHJ1biArPSBEW3hdW3ldOwogICAgICAgICAgICBTW3hdW3ldID0gU1t4LTFdW3ldICsgcnVuOwogICAgICAgIH0KICAgIH0KCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGJ5VChtYXhUKzEpOwogICAgZmYoaSwwLFAtMSkgYnlUW3Vwc1tpXS50XS5wdXNoX2JhY2soaSk7CgogICAgY29uc3QgaW50IEIgPSAzMjsKICAgIGludCBCWCA9IChLICsgQiAtIDEpIC8gQiwgQlkgPSAoSyArIEIgLSAxKSAvIEI7CgogICAgc3RydWN0IEJsb2NrSW5mbyB7CiAgICAgICAgaW50IGNhbmQgPSAwOwogICAgICAgIGxsIGJhbCA9IDA7CiAgICAgICAgdmVjdG9yPGludD4gYm9yZGVyOwogICAgfTsKICAgIHZlY3Rvcjx2ZWN0b3I8QmxvY2tJbmZvPj4gYmxrKEJYLCB2ZWN0b3I8QmxvY2tJbmZvPihCWSkpOwoKICAgIGF1dG8gYmxvY2tCb3VuZHMgPSBbJl0oaW50IGJ4LCBpbnQgYnkpIHsKICAgICAgICBpbnQgeGwgPSBieCpCICsgMSwgeHIgPSBtaW4oSywgKGJ4KzEpKkIpOwogICAgICAgIGludCB5bCA9IGJ5KkIgKyAxLCB5ciA9IG1pbihLLCAoYnkrMSkqQik7CiAgICAgICAgcmV0dXJuIGFycmF5PGludCw0Pnt4bCx5bCx4cix5cn07CiAgICB9OwoKICAgIGF1dG8gZnVsbHlDb3ZlciA9IFsmXShjb25zdCBVcGQmIHUsIGludCBieCwgaW50IGJ5KS0+Ym9vbHsKICAgICAgICBhdXRvIGIgPSBibG9ja0JvdW5kcyhieCxieSk7CiAgICAgICAgcmV0dXJuICh1LnhhIDw9IGJbMF0gJiYgYlsyXSA8PSB1LnhiICYmIHUueWEgPD0gYlsxXSAmJiBiWzNdIDw9IHUueWIpOwogICAgfTsKCiAgICBhdXRvIG92ZXJsYXAgPSBbJl0oY29uc3QgVXBkJiB1LCBpbnQgYngsIGludCBieSktPmJvb2x7CiAgICAgICAgYXV0byBiID0gYmxvY2tCb3VuZHMoYngsYnkpOwogICAgICAgIGlmICh1LnhhID4gYlsyXSB8fCB1LnhiIDwgYlswXSB8fCB1LnlhID4gYlszXSB8fCB1LnliIDwgYlsxXSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICBmb3IoaW50IGk9MDtpPFA7KytpKXsKICAgICAgICBjb25zdCBhdXRvICZ1ID0gdXBzW2ldOwogICAgICAgIGludCBieDEgPSAodS54YS0xKS9CLCBieDIgPSAodS54Yi0xKS9COwogICAgICAgIGludCBieTEgPSAodS55YS0xKS9CLCBieTIgPSAodS55Yi0xKS9COwoKICAgICAgICBmb3IoaW50IGJ4PWJ4MTsgYng8PWJ4MjsgKytieCl7CiAgICAgICAgICAgIGZvcihpbnQgYnk9YnkxOyBieTw9YnkyOyArK2J5KXsKICAgICAgICAgICAgICAgIGlmKGZ1bGx5Q292ZXIodSxieCxieSkpewogICAgICAgICAgICAgICAgICAgIGF1dG8gJmJpID0gYmxrW2J4XVtieV07CiAgICAgICAgICAgICAgICAgICAgaWYoYmkuY2FuZD09dS50KXsgYmkuYmFsICs9IHUudzsgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJpLmJhbCA+PSB1LncpIGJpLmJhbCAtPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyBiaS5jYW5kID0gdS50OyBiaS5iYWwgPSB1LncgLSBiaS5iYWw7IH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9ZWxzZSBpZihvdmVybGFwKHUsYngsYnkpKXsKICAgICAgICAgICAgICAgICAgICBibGtbYnhdW2J5XS5ib3JkZXIucHVzaF9iYWNrKGkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gYW5zKEsrMSwgdmVjdG9yPGludD4oSysxLCAwKSk7CgogICAgZm9yKGludCBieD0wOyBieDxCWDsgKytieCl7CiAgICAgICAgZm9yKGludCBieT0wOyBieTxCWTsgKytieSl7CiAgICAgICAgICAgIGF1dG8gYiA9IGJsb2NrQm91bmRzKGJ4LGJ5KTsKICAgICAgICAgICAgaW50IHhsPWJbMF0sIHlsPWJbMV0sIHhyPWJbMl0sIHlyPWJbM107CiAgICAgICAgICAgIGludCBueCA9IHhyLXhsKzEsIG55ID0geXIteWwrMTsKCiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IGNhbmRMaXN0OwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1bm9yZGVyZWRfc2V0PGludD4gc2VlbjsKICAgICAgICAgICAgICAgIGlmKGJsa1tieF1bYnldLmNhbmQpIHsgc2Vlbi5pbnNlcnQoYmxrW2J4XVtieV0uY2FuZCk7IGNhbmRMaXN0LnB1c2hfYmFjayhibGtbYnhdW2J5XS5jYW5kKTsgfQogICAgICAgICAgICAgICAgZm9yKGludCBpZDogYmxrW2J4XVtieV0uYm9yZGVyKXsKICAgICAgICAgICAgICAgICAgICBpbnQgdCA9IHVwc1tpZF0udDsKICAgICAgICAgICAgICAgICAgICBpZighc2Vlbi5jb3VudCh0KSl7IHNlZW4uaW5zZXJ0KHQpOyBjYW5kTGlzdC5wdXNoX2JhY2sodCk7IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYoY2FuZExpc3QuZW1wdHkoKSl7CiAgICAgICAgICAgICAgICBmZih4LHhsLHhyKSBmZih5LHlsLHlyKSBhbnNbeF1beV09MDsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmZih4LHhsLHhyKSBmZih5LHlsLHlyKSBhbnNbeF1beV09MDsKCiAgICAgICAgICAgIGZvcihpbnQgdCA6IGNhbmRMaXN0KXsKICAgICAgICAgICAgICAgIHZlY3Rvcjx2ZWN0b3I8bGw+PiBEbG9jKG54KzIsIHZlY3RvcjxsbD4obnkrMiwgMCkpOwogICAgICAgICAgICAgICAgbGwgYmFzZUFsbCA9IDA7CgogICAgICAgICAgICAgICAgZm9yKGludCBpZCA6IGJ5VFt0XSl7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byAmdSA9IHVwc1tpZF07CiAgICAgICAgICAgICAgICAgICAgaWYodS54YT54ciB8fCB1LnhiPHhsIHx8IHUueWE+eXIgfHwgdS55Yjx5bCkgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgIGlmKHUueGE8PXhsICYmIHhyPD11LnhiICYmIHUueWE8PXlsICYmIHlyPD11LnliKXsKICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUFsbCArPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4YT1tYXgodS54YSx4bCksIHhiPW1pbih1LnhiLHhyKTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHlhPW1heCh1LnlhLHlsKSwgeWI9bWluKHUueWIseXIpOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeDE9eGEteGwrMSwgeDI9eGIteGwrMTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHkxPXlhLXlsKzEsIHkyPXliLXlsKzE7CiAgICAgICAgICAgICAgICAgICAgICAgIERsb2NbeDFdW3kxXSAgICAgICArPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgICAgIERsb2NbeDIrMV1beTFdICAgICAtPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgICAgIERsb2NbeDFdW3kyKzFdICAgICAtPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgICAgIERsb2NbeDIrMV1beTIrMV0gICArPSB1Lnc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8PW54OysraSl7CiAgICAgICAgICAgICAgICAgICAgZm9yKGludCBqPTE7ajw9bnk7KytqKXsKICAgICAgICAgICAgICAgICAgICAgICAgRGxvY1tpXVtqXSArPSBEbG9jW2ktMV1bal0gKyBEbG9jW2ldW2otMV0gLSBEbG9jW2ktMV1bai0xXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBib29sIGFueVNldCA9IGZhbHNlOwogICAgICAgICAgICAgICAgZm9yKGludCBpPTE7aTw9bng7KytpKXsKICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGo9MTtqPD1ueTsrK2opewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCA9IHhsICsgaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCB5ID0geWwgKyBqIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoYW5zW3hdW3ldKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgbGwgRWMgPSBiYXNlQWxsICsgRGxvY1tpXVtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIEVjKjIgPiBTW3hdW3ldICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnNbeF1beV0gPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55U2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmZih4LDEsSyl7CiAgICAgICAgZmYoeSwxLEspewogICAgICAgICAgICBpZih5PjEpIGNvdXQgPDwgJyAnOwogICAgICAgICAgICBjb3V0IDw8IGFuc1t4XVt5XTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCAnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0=