#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define vll vector<ll>
#define pll pair<ll, ll>
typedef int ll;
const ll mxN=5e4+5;
const ll LOG=21;
ll dsu[mxN];
ll ans[mxN];
ll svid[mxN][LOG];
ll find_set(ll tar){
if(dsu[tar]<0) return tar;
return dsu[tar]=find_set(dsu[tar]);
}
void unite(ll a, ll b){
ll f=find_set(a);
ll s=find_set(b);
assert(f!=s);
if(abs(dsu[f])<abs(dsu[s])) swap(f, s);
dsu[f]+=dsu[s];
ans[f] += ans[s];
dsu[s]=f;
}
struct segtree1{
vector<pll> tree;
ll treelen;
void init(ll siz){
treelen=siz+1;
while(__builtin_popcount(treelen)!=1) treelen++;
tree=vector<pll> (2*treelen, make_pair(0, 0));
}
void add1(ll idx, ll low, ll high, ll qlow, ll qhigh, ll id){
if(low>=qlow && high<=qhigh){
if(tree[idx].S!=0){
if(find_set(tree[idx].F)!=find_set(id)){
unite(tree[idx].F, id);
}
}
tree[idx].F=id;
tree[idx].S++;
return;
}
if(low>qhigh || high<qlow){
return;
}
ll mid=(low+high)/2;
add1(2*idx, low, mid, qlow, qhigh, id);
add1(2*idx+1, mid+1, high, qlow, qhigh, id);
}
void add(ll qlow, ll qhigh, ll id){
add1(1, 0, treelen-1, qlow, qhigh, id);
}
void rem1(ll idx, ll low, ll high, ll qlow, ll qhigh, ll id){
if(low>=qlow && high<=qhigh){
tree[idx].S--;
return;
}
if(low>qhigh || high<qlow){
return;
}
ll mid=(low+high)/2;
rem1(2*idx, low, mid, qlow, qhigh, id);
rem1(2*idx+1, mid+1, high, qlow, qhigh, id);
}
void rem(ll qlow, ll qhigh, ll id){
rem1(1, 0, treelen-1, qlow, qhigh, id);
}
void qry(ll idx, ll id){
ll tar=idx+treelen;
while(tar>0){
if(tree[tar].S>0){
if(find_set(tree[tar].F)!=find_set(id)){
unite(tree[tar].F, id);
}
}
tar/=2;
}
}
};
struct segtree2{
vector<vector<pll>> tree;
ll treelen;
ll d;
void init(ll siz){
treelen=siz+1;
while(__builtin_popcount(treelen)!=1) treelen++;
d=__builtin_ctz(treelen);
tree=vector<vector<pll>> (2*treelen, vector<pll>());
}
void add(ll idx, ll id){
// cout<<"adding "<<idx<<' '<<id<<'\n';
ll tar=idx+treelen;
ll dep=d;
while(tar>0){
svid[id][dep]=(ll) tree[tar].size();
// cout<<"dep: "<<dep<<'\n';
// cout<<"svid["<<id<<"]["<<dep<<"] : "<<svid[id][dep]<<'\n';
tree[tar].pb({id, 1});
tar/=2;
dep--;
}
assert(dep==-1);
}
void rem(ll idx, ll id){
ll tar=idx+treelen;
ll dep=d;
while(tar>0){
assert(svid[id][dep]<tree[tar].size());
// cout<<"svid["<<id<<"]["<<dep<<"] : "<<svid[id][dep]<<'\n';
tree[tar][svid[id][dep]].S--;
tar/=2;
dep--;
}
assert(dep==-1);
}
void qry1(ll idx, ll low, ll high, ll qlow, ll qhigh, ll id, ll dep){
if(low>=qlow && high<=qhigh){
ll siz=0;
ll dumb=0;
for(auto &[x, y]:tree[idx]){
if(y>0){
dumb=x;
svid[x][dep]=0;
// cout<<"svid["<<x<<"]["<<dep<<"] : "<<svid[id][dep]<<'\n';
if(find_set(x)!=find_set(id)){
unite(x, id);
}
}
siz+=y;
}
tree[idx].clear();
if(siz>0) tree[idx].pb({dumb, siz});
// svid[id][dep]=0;
// cout<<"svid["<<id<<"]["<<dep<<"] : "<<svid[id][dep]<<'\n';
return;
}
if(low>qhigh || high<qlow){
return;
}
ll mid=(low+high)/2;
qry1(2*idx, low, mid, qlow, qhigh, id, dep+1);
qry1(2*idx+1, mid+1, high, qlow, qhigh, id, dep+1);
}
void qry(ll qlow, ll qhigh, ll id){
qry1(1, 0, treelen-1, qlow, qhigh, id, 0);
}
};
ll n;
vll con;
segtree1 seg1;
segtree2 seg2;
vector<array<ll, 3>> v;
ll siz;
ll id(ll tar){
return lower_bound(con.begin(), con.end(), tar)-con.begin();
}
bool compare(array<ll, 3> a, array<ll, 3> b){
if(a[0]!=b[0]){
return a[0]<b[0];
}
if(a[1]!=b[1]){
return a[1]>b[1];
}
return a[2]<b[2];
}
int solve(int N){
memset(dsu, -1, sizeof(dsu));
for(int i = 0; i < mxN; i++){
ans[i] = 0;
}
memset(svid, 0, sizeof(svid));
n=N;
vector<int>a(n), b(n), c(n), d(n);
for(ll i=0;i<n;i++){
int x, y, h, w;
cin >> x >> y >> h >> w;
a[i] = x;
c[i] = x + h;
b[i] = y;
d[i] = y + w;
con.pb(b[i]);
con.pb(d[i]);
v.pb({a[i], 1, i});
v.pb({c[i], -1, i});
ans[i] = h * w;
}
sort(con.begin(), con.end());
con.erase(unique(con.begin(), con.end()), con.end());
sort(v.begin(), v.end(), compare);
siz=(ll) con.size();
seg1.init(siz);
seg2.init(siz);
for(auto &it:v){
ll cur=it[2];
if(it[1]==1){
seg1.qry(id(b[cur]), cur);
seg1.qry(id(d[cur]), cur);
seg2.qry(id(b[cur]), id(d[cur]), cur);
seg1.add(id(b[cur]), id(d[cur]), cur);
seg2.add(id(b[cur]), cur);
// seg2.add(id(d[cur]), cur);
}
else{
assert(it[1]==-1);
seg1.rem(id(b[cur]), id(d[cur]), cur);
seg2.rem(id(b[cur]), cur);
// seg2.rem(id(d[cur]), cur);
}
}
con.clear();
for(ll i=0;i<n;i++){
con.pb(find_set(i));
}
sort(con.begin(), con.end());
con.erase(unique(con.begin(), con.end()), con.end());
vll re(n);
int an = 0;
for(ll i=0;i<n;i++){
an = max(an, ans[find_set(i)]);
}
return an;
}
int main(){
int n;
while(cin >> n){
cout << solve(n) << '\n';
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdmxsIHZlY3RvcjxsbD4KI2RlZmluZSBwbGwgcGFpcjxsbCwgbGw+Cgp0eXBlZGVmIGludCBsbDsKCmNvbnN0IGxsIG14Tj01ZTQrNTsKY29uc3QgbGwgTE9HPTIxOwoKbGwgZHN1W214Tl07CmxsIGFuc1tteE5dOwpsbCBzdmlkW214Tl1bTE9HXTsKCmxsIGZpbmRfc2V0KGxsIHRhcil7CiAgICBpZihkc3VbdGFyXTwwKSByZXR1cm4gdGFyOwogICAgcmV0dXJuIGRzdVt0YXJdPWZpbmRfc2V0KGRzdVt0YXJdKTsKfQoKdm9pZCB1bml0ZShsbCBhLCBsbCBiKXsKICAgIGxsIGY9ZmluZF9zZXQoYSk7CiAgICBsbCBzPWZpbmRfc2V0KGIpOwogICAgYXNzZXJ0KGYhPXMpOwogICAgaWYoYWJzKGRzdVtmXSk8YWJzKGRzdVtzXSkpIHN3YXAoZiwgcyk7CiAgICBkc3VbZl0rPWRzdVtzXTsKICAgIGFuc1tmXSArPSBhbnNbc107CiAgICBkc3Vbc109ZjsKfQoKc3RydWN0IHNlZ3RyZWUxewogICAgdmVjdG9yPHBsbD4gdHJlZTsKICAgIGxsIHRyZWVsZW47CgogICAgdm9pZCBpbml0KGxsIHNpeil7CiAgICAgICAgdHJlZWxlbj1zaXorMTsKICAgICAgICB3aGlsZShfX2J1aWx0aW5fcG9wY291bnQodHJlZWxlbikhPTEpIHRyZWVsZW4rKzsKICAgICAgICB0cmVlPXZlY3RvcjxwbGw+ICgyKnRyZWVsZW4sIG1ha2VfcGFpcigwLCAwKSk7CiAgICB9CgogICAgdm9pZCBhZGQxKGxsIGlkeCwgbGwgbG93LCBsbCBoaWdoLCBsbCBxbG93LCBsbCBxaGlnaCwgbGwgaWQpewogICAgICAgIGlmKGxvdz49cWxvdyAmJiBoaWdoPD1xaGlnaCl7CiAgICAgICAgICAgIGlmKHRyZWVbaWR4XS5TIT0wKXsKICAgICAgICAgICAgICAgIGlmKGZpbmRfc2V0KHRyZWVbaWR4XS5GKSE9ZmluZF9zZXQoaWQpKXsKICAgICAgICAgICAgICAgICAgICB1bml0ZSh0cmVlW2lkeF0uRiwgaWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyZWVbaWR4XS5GPWlkOwogICAgICAgICAgICB0cmVlW2lkeF0uUysrOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKGxvdz5xaGlnaCB8fCBoaWdoPHFsb3cpewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxsIG1pZD0obG93K2hpZ2gpLzI7CiAgICAgICAgYWRkMSgyKmlkeCwgbG93LCBtaWQsIHFsb3csIHFoaWdoLCBpZCk7CiAgICAgICAgYWRkMSgyKmlkeCsxLCBtaWQrMSwgaGlnaCwgcWxvdywgcWhpZ2gsIGlkKTsKICAgIH0KCiAgICB2b2lkIGFkZChsbCBxbG93LCBsbCBxaGlnaCwgbGwgaWQpewogICAgICAgIGFkZDEoMSwgMCwgdHJlZWxlbi0xLCBxbG93LCBxaGlnaCwgaWQpOwogICAgfQoKICAgIHZvaWQgcmVtMShsbCBpZHgsIGxsIGxvdywgbGwgaGlnaCwgbGwgcWxvdywgbGwgcWhpZ2gsIGxsIGlkKXsKICAgICAgICBpZihsb3c+PXFsb3cgJiYgaGlnaDw9cWhpZ2gpewogICAgICAgICAgICB0cmVlW2lkeF0uUy0tOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKGxvdz5xaGlnaCB8fCBoaWdoPHFsb3cpewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxsIG1pZD0obG93K2hpZ2gpLzI7CiAgICAgICAgcmVtMSgyKmlkeCwgbG93LCBtaWQsIHFsb3csIHFoaWdoLCBpZCk7CiAgICAgICAgcmVtMSgyKmlkeCsxLCBtaWQrMSwgaGlnaCwgcWxvdywgcWhpZ2gsIGlkKTsKICAgIH0KCiAgICB2b2lkIHJlbShsbCBxbG93LCBsbCBxaGlnaCwgbGwgaWQpewogICAgICAgIHJlbTEoMSwgMCwgdHJlZWxlbi0xLCBxbG93LCBxaGlnaCwgaWQpOwogICAgfQoKICAgIHZvaWQgcXJ5KGxsIGlkeCwgbGwgaWQpewogICAgICAgIGxsIHRhcj1pZHgrdHJlZWxlbjsKICAgICAgICB3aGlsZSh0YXI+MCl7CiAgICAgICAgICAgIGlmKHRyZWVbdGFyXS5TPjApewogICAgICAgICAgICAgICAgaWYoZmluZF9zZXQodHJlZVt0YXJdLkYpIT1maW5kX3NldChpZCkpewogICAgICAgICAgICAgICAgICAgIHVuaXRlKHRyZWVbdGFyXS5GLCBpZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFyLz0yOwogICAgICAgIH0KICAgIH0KfTsKCnN0cnVjdCBzZWd0cmVlMnsKICAgIHZlY3Rvcjx2ZWN0b3I8cGxsPj4gdHJlZTsKICAgIGxsIHRyZWVsZW47CiAgICBsbCBkOwoKICAgIHZvaWQgaW5pdChsbCBzaXopewogICAgICAgIHRyZWVsZW49c2l6KzE7CiAgICAgICAgd2hpbGUoX19idWlsdGluX3BvcGNvdW50KHRyZWVsZW4pIT0xKSB0cmVlbGVuKys7CiAgICAgICAgZD1fX2J1aWx0aW5fY3R6KHRyZWVsZW4pOwogICAgICAgIHRyZWU9dmVjdG9yPHZlY3RvcjxwbGw+PiAoMip0cmVlbGVuLCB2ZWN0b3I8cGxsPigpKTsKICAgIH0KCiAgICB2b2lkIGFkZChsbCBpZHgsIGxsIGlkKXsKICAgICAgICAvLyBjb3V0PDwiYWRkaW5nICI8PGlkeDw8JyAnPDxpZDw8J1xuJzsKICAgICAgICBsbCB0YXI9aWR4K3RyZWVsZW47CiAgICAgICAgbGwgZGVwPWQ7CiAgICAgICAgd2hpbGUodGFyPjApewogICAgICAgICAgICBzdmlkW2lkXVtkZXBdPShsbCkgdHJlZVt0YXJdLnNpemUoKTsKICAgICAgICAgICAgLy8gY291dDw8ImRlcDogIjw8ZGVwPDwnXG4nOwogICAgICAgICAgICAvLyBjb3V0PDwic3ZpZFsiPDxpZDw8Il1bIjw8ZGVwPDwiXSA6ICI8PHN2aWRbaWRdW2RlcF08PCdcbic7IAogICAgICAgICAgICB0cmVlW3Rhcl0ucGIoe2lkLCAxfSk7CiAgICAgICAgICAgIHRhci89MjsKICAgICAgICAgICAgZGVwLS07CiAgICAgICAgfQogICAgICAgIGFzc2VydChkZXA9PS0xKTsKICAgIH0KCiAgICB2b2lkIHJlbShsbCBpZHgsIGxsIGlkKXsKICAgICAgICBsbCB0YXI9aWR4K3RyZWVsZW47CiAgICAgICAgbGwgZGVwPWQ7CiAgICAgICAgd2hpbGUodGFyPjApewogICAgICAgICAgICBhc3NlcnQoc3ZpZFtpZF1bZGVwXTx0cmVlW3Rhcl0uc2l6ZSgpKTsKICAgICAgICAgICAgLy8gY291dDw8InN2aWRbIjw8aWQ8PCJdWyI8PGRlcDw8Il0gOiAiPDxzdmlkW2lkXVtkZXBdPDwnXG4nOwogICAgICAgICAgICB0cmVlW3Rhcl1bc3ZpZFtpZF1bZGVwXV0uUy0tOwogICAgICAgICAgICB0YXIvPTI7CiAgICAgICAgICAgIGRlcC0tOwogICAgICAgIH0KICAgICAgICBhc3NlcnQoZGVwPT0tMSk7CiAgICB9CgogICAgdm9pZCBxcnkxKGxsIGlkeCwgbGwgbG93LCBsbCBoaWdoLCBsbCBxbG93LCBsbCBxaGlnaCwgbGwgaWQsIGxsIGRlcCl7CiAgICAgICAgaWYobG93Pj1xbG93ICYmIGhpZ2g8PXFoaWdoKXsKICAgICAgICAgICAgbGwgc2l6PTA7CiAgICAgICAgICAgIGxsIGR1bWI9MDsKICAgICAgICAgICAgZm9yKGF1dG8gJlt4LCB5XTp0cmVlW2lkeF0pewogICAgICAgICAgICAgICAgaWYoeT4wKXsKICAgICAgICAgICAgICAgICAgICBkdW1iPXg7CiAgICAgICAgICAgICAgICAgICAgc3ZpZFt4XVtkZXBdPTA7CiAgICAgICAgICAgICAgICAgICAgLy8gY291dDw8InN2aWRbIjw8eDw8Il1bIjw8ZGVwPDwiXSA6ICI8PHN2aWRbaWRdW2RlcF08PCdcbic7CiAgICAgICAgICAgICAgICAgICAgaWYoZmluZF9zZXQoeCkhPWZpbmRfc2V0KGlkKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRlKHgsIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzaXorPXk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJlZVtpZHhdLmNsZWFyKCk7CiAgICAgICAgICAgIGlmKHNpej4wKSB0cmVlW2lkeF0ucGIoe2R1bWIsIHNpen0pOwogICAgICAgICAgICAvLyBzdmlkW2lkXVtkZXBdPTA7CiAgICAgICAgICAgIC8vIGNvdXQ8PCJzdmlkWyI8PGlkPDwiXVsiPDxkZXA8PCJdIDogIjw8c3ZpZFtpZF1bZGVwXTw8J1xuJzsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZihsb3c+cWhpZ2ggfHwgaGlnaDxxbG93KXsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBsbCBtaWQ9KGxvdytoaWdoKS8yOwogICAgICAgIHFyeTEoMippZHgsIGxvdywgbWlkLCBxbG93LCBxaGlnaCwgaWQsIGRlcCsxKTsKICAgICAgICBxcnkxKDIqaWR4KzEsIG1pZCsxLCBoaWdoLCBxbG93LCBxaGlnaCwgaWQsIGRlcCsxKTsKICAgIH0KCiAgICB2b2lkIHFyeShsbCBxbG93LCBsbCBxaGlnaCwgbGwgaWQpewogICAgICAgIHFyeTEoMSwgMCwgdHJlZWxlbi0xLCBxbG93LCBxaGlnaCwgaWQsIDApOwogICAgfQp9OwoKbGwgbjsKdmxsIGNvbjsKc2VndHJlZTEgc2VnMTsKc2VndHJlZTIgc2VnMjsKdmVjdG9yPGFycmF5PGxsLCAzPj4gdjsKbGwgc2l6OwoKbGwgaWQobGwgdGFyKXsKICAgIHJldHVybiBsb3dlcl9ib3VuZChjb24uYmVnaW4oKSwgY29uLmVuZCgpLCB0YXIpLWNvbi5iZWdpbigpOwp9Cgpib29sIGNvbXBhcmUoYXJyYXk8bGwsIDM+IGEsIGFycmF5PGxsLCAzPiBiKXsKICAgIGlmKGFbMF0hPWJbMF0pewogICAgICAgIHJldHVybiBhWzBdPGJbMF07CiAgICB9CiAgICBpZihhWzFdIT1iWzFdKXsKICAgICAgICByZXR1cm4gYVsxXT5iWzFdOwogICAgfQogICAgcmV0dXJuIGFbMl08YlsyXTsKfQoKaW50IHNvbHZlKGludCBOKXsKICAgIG1lbXNldChkc3UsIC0xLCBzaXplb2YoZHN1KSk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbXhOOyBpKyspewogICAgICAgIGFuc1tpXSA9IDA7CiAgICB9CiAgICBtZW1zZXQoc3ZpZCwgMCwgc2l6ZW9mKHN2aWQpKTsKICAgIG49TjsKICAgIHZlY3RvcjxpbnQ+YShuKSwgYihuKSwgYyhuKSwgZChuKTsKICAgIGZvcihsbCBpPTA7aTxuO2krKyl7CiAgICAgICAgaW50IHgsIHksIGgsIHc7CiAgICAgICAgY2luID4+IHggPj4geSA+PiBoID4+IHc7CiAgICAgICAgYVtpXSA9IHg7CiAgICAgICAgY1tpXSA9IHggKyBoOwogICAgICAgIGJbaV0gPSB5OwogICAgICAgIGRbaV0gPSB5ICsgdzsKICAgICAgICBjb24ucGIoYltpXSk7CiAgICAgICAgY29uLnBiKGRbaV0pOwogICAgICAgIHYucGIoe2FbaV0sIDEsIGl9KTsKICAgICAgICB2LnBiKHtjW2ldLCAtMSwgaX0pOwogICAgICAgIGFuc1tpXSA9IGggKiB3OwogICAgfQogICAgc29ydChjb24uYmVnaW4oKSwgY29uLmVuZCgpKTsKICAgIGNvbi5lcmFzZSh1bmlxdWUoY29uLmJlZ2luKCksIGNvbi5lbmQoKSksIGNvbi5lbmQoKSk7CiAgICBzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSwgY29tcGFyZSk7CiAgICBzaXo9KGxsKSBjb24uc2l6ZSgpOwogICAgc2VnMS5pbml0KHNpeik7CiAgICBzZWcyLmluaXQoc2l6KTsKICAgIGZvcihhdXRvICZpdDp2KXsKICAgICAgICBsbCBjdXI9aXRbMl07CiAgICAgICAgaWYoaXRbMV09PTEpewogICAgICAgICAgICBzZWcxLnFyeShpZChiW2N1cl0pLCBjdXIpOwogICAgICAgICAgICBzZWcxLnFyeShpZChkW2N1cl0pLCBjdXIpOwogICAgICAgICAgICBzZWcyLnFyeShpZChiW2N1cl0pLCBpZChkW2N1cl0pLCBjdXIpOwogICAgICAgICAgICBzZWcxLmFkZChpZChiW2N1cl0pLCBpZChkW2N1cl0pLCBjdXIpOwogICAgICAgICAgICBzZWcyLmFkZChpZChiW2N1cl0pLCBjdXIpOwogICAgICAgICAgICAvLyBzZWcyLmFkZChpZChkW2N1cl0pLCBjdXIpOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBhc3NlcnQoaXRbMV09PS0xKTsKICAgICAgICAgICAgc2VnMS5yZW0oaWQoYltjdXJdKSwgaWQoZFtjdXJdKSwgY3VyKTsKICAgICAgICAgICAgc2VnMi5yZW0oaWQoYltjdXJdKSwgY3VyKTsKICAgICAgICAgICAgLy8gc2VnMi5yZW0oaWQoZFtjdXJdKSwgY3VyKTsKICAgICAgICB9CiAgICB9CiAgICBjb24uY2xlYXIoKTsKICAgIGZvcihsbCBpPTA7aTxuO2krKyl7CiAgICAgICAgY29uLnBiKGZpbmRfc2V0KGkpKTsKICAgIH0KICAgIHNvcnQoY29uLmJlZ2luKCksIGNvbi5lbmQoKSk7CiAgICBjb24uZXJhc2UodW5pcXVlKGNvbi5iZWdpbigpLCBjb24uZW5kKCkpLCBjb24uZW5kKCkpOwogICAgdmxsIHJlKG4pOwogICAgaW50IGFuID0gMDsKICAgIGZvcihsbCBpPTA7aTxuO2krKyl7CiAgICAgICAgYW4gPSBtYXgoYW4sIGFuc1tmaW5kX3NldChpKV0pOwogICAgfQogICAgcmV0dXJuIGFuOwp9CmludCBtYWluKCl7CiAgICBpbnQgbjsKICAgIHdoaWxlKGNpbiA+PiBuKXsKICAgICAgICBjb3V0IDw8IHNvbHZlKG4pIDw8ICdcbic7CiAgICB9Cn0=