#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
#define int long long
#define all(x) x.begin(),x.end()
#define pb push_back
#define rall(x) x.rbegin(),x.rend()
const int N=1e5+2,mod=998244353,MOD=1e9+7,INF=9223372036854775806;
int a[N],b[N],c[N];
void build(int t[],int a[],int v,int tl,int tr){
if(tl==tr){
t[v]=a[tl];
return;
}
int m=(tl+tr)/2;
build(t,a,v+v,tl,m);
build(t,a,v+v+1,m+1,tr);
t[v]=max(t[v+v],t[v+v+1]);
}
int get(int t[],int v,int tl,int tr,int l,int r){
if(l>tr||r<tl){
return -INF;
}
else if(tl>=l&&tr<=r){
return t[v];
}
int m=(tl+tr)/2;
return max(get(t,v+v,tl,m,l,r),get(t,v+v+1,m+1,tr,l,r));
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int T=1;
cin>>T;
while(T--){
int n,ans=0;
cin>>n;
int p2[n+2],s2[n+2],p3[n+2],s3[n+2],t2[n+n+n+n+2],t3[n+n+n+n+2];
p2[0]=0;
s2[n+1]=0;
p3[0]=0;
s3[n+1]=0;
map<int,vector<int>>pos2,pos3;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
pos2[b[i]].pb(i);
}
for(int i=1;i<=n;i++){
cin>>c[i];
pos3[c[i]].pb(i);
}
build(t2,b,1,1,n);
build(t3,c,1,1,n);
for(int i=1;i<=n;i++){
p2[i]=max(p2[i-1],b[i]);
p3[i]=max(p3[i-1],c[i]);
}
for(int i=n;i>=1;i--){
s2[i]=max(s2[i+1],b[i]);
s3[i]=max(s3[i+1],c[i]);
}
for(int i=1;i<=n;i++){
int x=max(p2[i-1],s2[i+1]),y=max(p3[i-1],s3[i+1]);
if(pos2[x].size()>2||pos3[y].size()>2){
ans=max(ans,a[i]+x+y);
}
else if(pos2[x].size()==1&&pos3[y].size()==1){
if(pos2[x][0]==pos3[y][0]){
int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else{
ans=max(ans,a[i]+x+y);
}
}
else if(pos2[x].size()==2&&pos3[y].size()==1){
if(pos2[x][0]!=i&&pos2[x][1]!=i){
ans=max(ans,a[i]+x+y);
}
else{
if(pos2[x][0]!=i&&pos2[x][0]==pos3[y][0]){
int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else if(pos2[x][0]==i&&pos2[x][1]==pos3[y][0]){
int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][1],j2=pos3[y][0];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else{
ans=max(ans,a[i]+x+y);
}
}
}
else if(pos2[x].size()==1&&pos3[y].size()==2){
if(pos3[y][0]!=i&&pos3[y][1]!=i){
ans=max(ans,a[i]+x+y);
}
else{
if(pos3[y][0]!=i&&pos2[x][0]==pos3[y][0]){
int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][0];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else if(pos3[y][0]==i&&pos3[y][1]==pos2[x][0]){
int x1=x,y1=0,x2=0,y2=y,j1=pos2[x][0],j2=pos3[y][1];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else{
ans=max(ans,a[i]+x+y);
}
}
}
else if(pos2[x].size()==2&&pos3[y].size()==2){
vector<int>q2,q3;
if(pos2[x][0]!=i){
q2.pb(pos2[x][0]);
}
if(pos2[x][1]!=i){
q2.pb(pos2[x][1]);
}
if(pos3[y][0]!=i){
q3.pb(pos3[y][0]);
}
if(pos3[y][1]!=i){
q3.pb(pos3[y][1]);
}
if(q2.size()>1||q3.size()>1){
ans=max(ans,a[i]+x+y);
}
else{
if(q2[0]==q3[0]){
int x1=x,y1=0,x2=0,y2=y,j1=q2[0],j2=q3[0];
if(j1<i){
if(1<=j1-1){
y1=max(y1,get(t3,1,1,n,1,j1-1));
}
if(j1+1<=i-1){
y1=max(y1,get(t3,1,1,n,j1+1,i-1));
}
if(i+1<=n){
y1=max(y1,get(t3,1,1,n,i+1,n));
}
}
else if(i<j1){
if(1<=i-1){
y1=max(y1,get(t3,1,1,n,1,i-1));
}
if(i+1<=j1-1){
y1=max(y1,get(t3,1,1,n,i+1,j1-1));
}
if(j1+1<=n){
y1=max(y1,get(t3,1,1,n,j1+1,n));
}
}
if(j2<i){
if(1<=j2-1){
x2=max(x2,get(t2,1,1,n,1,j2-1));
}
if(j2+1<=i-1){
x2=max(x2,get(t2,1,1,n,j2+1,i-1));
}
if(i+1<=n){
x2=max(x2,get(t2,1,1,n,i+1,n));
}
}
else if(i<j2){
if(1<=i-1){
x2=max(x2,get(t2,1,1,n,1,i-1));
}
if(i+1<=j2-1){
x2=max(x2,get(t2,1,1,n,i+1,j2-1));
}
if(j2+1<=n){
x2=max(x2,get(t2,1,1,n,j2+1,n));
}
}
ans=max({ans,a[i]+x1+y1,a[i]+x2+y2});
}
else{
ans=max(ans,a[i]+x+y);
}
}
}
}
cout<<ans<<'\n';
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0MgdGFyZ2V0KCJzc2Usc3NlMixzc2UzLHNzc2UzLHNzZTQscG9wY250LGFibSxtbXgsYXZ4LHR1bmU9bmF0aXZlIikKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcmFsbCh4KSB4LnJiZWdpbigpLHgucmVuZCgpCmNvbnN0IGludCBOPTFlNSsyLG1vZD05OTgyNDQzNTMsTU9EPTFlOSs3LElORj05MjIzMzcyMDM2ODU0Nzc1ODA2OwppbnQgYVtOXSxiW05dLGNbTl07CnZvaWQgYnVpbGQoaW50IHRbXSxpbnQgYVtdLGludCB2LGludCB0bCxpbnQgdHIpewogICAgaWYodGw9PXRyKXsKICAgICAgICB0W3ZdPWFbdGxdOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtPSh0bCt0cikvMjsKICAgIGJ1aWxkKHQsYSx2K3YsdGwsbSk7CiAgICBidWlsZCh0LGEsdit2KzEsbSsxLHRyKTsKICAgIHRbdl09bWF4KHRbdit2XSx0W3YrdisxXSk7Cn0KaW50IGdldChpbnQgdFtdLGludCB2LGludCB0bCxpbnQgdHIsaW50IGwsaW50IHIpewogICAgaWYobD50cnx8cjx0bCl7CiAgICAgICAgcmV0dXJuIC1JTkY7CiAgICB9CiAgICBlbHNlIGlmKHRsPj1sJiZ0cjw9cil7CiAgICAgICAgcmV0dXJuIHRbdl07CiAgICB9CiAgICBpbnQgbT0odGwrdHIpLzI7CiAgICByZXR1cm4gbWF4KGdldCh0LHYrdix0bCxtLGwsciksZ2V0KHQsdit2KzEsbSsxLHRyLGwscikpOwp9CnNpZ25lZCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgLy9mcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwogICAgaW50IFQ9MTsKICAgIGNpbj4+VDsKICAgIHdoaWxlKFQtLSl7CiAgICAgICAgaW50IG4sYW5zPTA7CiAgICAgICAgY2luPj5uOwogICAgICAgIGludCBwMltuKzJdLHMyW24rMl0scDNbbisyXSxzM1tuKzJdLHQyW24rbituK24rMl0sdDNbbituK24rbisyXTsKICAgICAgICBwMlswXT0wOwogICAgICAgIHMyW24rMV09MDsKICAgICAgICBwM1swXT0wOwogICAgICAgIHMzW24rMV09MDsKICAgICAgICBtYXA8aW50LHZlY3RvcjxpbnQ+PnBvczIscG9zMzsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgICAgIGNpbj4+YVtpXTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgICAgICBjaW4+PmJbaV07CiAgICAgICAgICAgIHBvczJbYltpXV0ucGIoaSk7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICAgICAgY2luPj5jW2ldOwogICAgICAgICAgICBwb3MzW2NbaV1dLnBiKGkpOwogICAgICAgIH0KICAgICAgICBidWlsZCh0MixiLDEsMSxuKTsKICAgICAgICBidWlsZCh0MyxjLDEsMSxuKTsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgICAgIHAyW2ldPW1heChwMltpLTFdLGJbaV0pOwogICAgICAgICAgICBwM1tpXT1tYXgocDNbaS0xXSxjW2ldKTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpPW47aT49MTtpLS0pewogICAgICAgICAgICBzMltpXT1tYXgoczJbaSsxXSxiW2ldKTsKICAgICAgICAgICAgczNbaV09bWF4KHMzW2krMV0sY1tpXSk7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICAgICAgaW50IHg9bWF4KHAyW2ktMV0sczJbaSsxXSkseT1tYXgocDNbaS0xXSxzM1tpKzFdKTsKICAgICAgICAgICAgaWYocG9zMlt4XS5zaXplKCk+Mnx8cG9zM1t5XS5zaXplKCk+Mil7CiAgICAgICAgICAgICAgICBhbnM9bWF4KGFucyxhW2ldK3greSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihwb3MyW3hdLnNpemUoKT09MSYmcG9zM1t5XS5zaXplKCk9PTEpewogICAgICAgICAgICAgICAgaWYocG9zMlt4XVswXT09cG9zM1t5XVswXSl7CiAgICAgICAgICAgICAgICAgICAgaW50IHgxPXgseTE9MCx4Mj0wLHkyPXksajE9cG9zMlt4XVswXSxqMj1wb3MzW3ldWzBdOwogICAgICAgICAgICAgICAgICAgIGlmKGoxPGkpewogICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1qMS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sMSxqMS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoajErMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixpKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaTxqMSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWktMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLDEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPD1qMS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4saSsxLGoxLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihqMSsxPD1uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYoajI8aSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbiwxLGoyLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihqMisxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixqMisxLGktMSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGkrMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihpPGoyKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixpKzEsajItMSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoyKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixqMisxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KHthbnMsYVtpXSt4MSt5MSxhW2ldK3gyK3kyfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIGFucz1tYXgoYW5zLGFbaV0reCt5KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHBvczJbeF0uc2l6ZSgpPT0yJiZwb3MzW3ldLnNpemUoKT09MSl7CiAgICAgICAgICAgICAgICBpZihwb3MyW3hdWzBdIT1pJiZwb3MyW3hdWzFdIT1pKXsKICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KGFucyxhW2ldK3greSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIGlmKHBvczJbeF1bMF0hPWkmJnBvczJbeF1bMF09PXBvczNbeV1bMF0pewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeDE9eCx5MT0wLHgyPTAseTI9eSxqMT1wb3MyW3hdWzBdLGoyPXBvczNbeV1bMF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoxPGkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9ajEtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbiwxLGoxLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoxKzE8PWktMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixqMSsxLGktMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPD1uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLGkrMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihpPGoxKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWktMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbiwxLGktMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPD1qMS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLGkrMSxqMS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMSsxPD1uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLGoxKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoyPGkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9ajItMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbiwxLGoyLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoyKzE8PWktMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixqMisxLGktMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPD1uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGkrMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihpPGoyKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWktMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbiwxLGktMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSsxPD1qMi0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGkrMSxqMi0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMisxPD1uKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGoyKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGFucz1tYXgoe2FucyxhW2ldK3gxK3kxLGFbaV0reDIreTJ9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihwb3MyW3hdWzBdPT1pJiZwb3MyW3hdWzFdPT1wb3MzW3ldWzBdKXsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgxPXgseTE9MCx4Mj0wLHkyPXksajE9cG9zMlt4XVsxXSxqMj1wb3MzW3ldWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBpZihqMTxpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWoxLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sMSxqMS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMSsxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixpKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaTxqMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9ajEtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixpKzEsajEtMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajErMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixqMSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihqMjxpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sMSxqMi0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMisxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sajIrMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixpKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaTxqMil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9ajItMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixpKzEsajItMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajIrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixqMisxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KHthbnMsYVtpXSt4MSt5MSxhW2ldK3gyK3kyfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIGFucz1tYXgoYW5zLGFbaV0reCt5KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZihwb3MyW3hdLnNpemUoKT09MSYmcG9zM1t5XS5zaXplKCk9PTIpewogICAgICAgICAgICAgICAgaWYocG9zM1t5XVswXSE9aSYmcG9zM1t5XVsxXSE9aSl7CiAgICAgICAgICAgICAgICAgICAgYW5zPW1heChhbnMsYVtpXSt4K3kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBpZihwb3MzW3ldWzBdIT1pJiZwb3MyW3hdWzBdPT1wb3MzW3ldWzBdKXsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgxPXgseTE9MCx4Mj0wLHkyPXksajE9cG9zMlt4XVswXSxqMj1wb3MzW3ldWzBdOwogICAgICAgICAgICAgICAgICAgICAgICBpZihqMTxpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWoxLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sMSxqMS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMSsxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixpKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaTxqMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9ajEtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixpKzEsajEtMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajErMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTE9bWF4KHkxLGdldCh0MywxLDEsbixqMSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZihqMjxpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKDE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sMSxqMi0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihqMisxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sajIrMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixpKzEsbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaTxqMil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1pLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sMSxpLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkrMTw9ajItMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixpKzEsajItMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajIrMTw9bil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDI9bWF4KHgyLGdldCh0MiwxLDEsbixqMisxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KHthbnMsYVtpXSt4MSt5MSxhW2ldK3gyK3kyfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYocG9zM1t5XVswXT09aSYmcG9zM1t5XVsxXT09cG9zMlt4XVswXSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCB4MT14LHkxPTAseDI9MCx5Mj15LGoxPXBvczJbeF1bMF0sajI9cG9zM1t5XVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoajE8aSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1qMS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLDEsajEtMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajErMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLGoxKzEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4saSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGk8ajEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLDEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PWoxLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4saSsxLGoxLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoxKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoajI8aSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1qMi0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLDEsajItMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajIrMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGoyKzEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4saSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGk8ajIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLDEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4saSsxLGoyLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoyKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sajIrMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYW5zPW1heCh7YW5zLGFbaV0reDEreTEsYVtpXSt4Mit5Mn0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KGFucyxhW2ldK3greSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYocG9zMlt4XS5zaXplKCk9PTImJnBvczNbeV0uc2l6ZSgpPT0yKXsKICAgICAgICAgICAgICAgIHZlY3RvcjxpbnQ+cTIscTM7CiAgICAgICAgICAgICAgICBpZihwb3MyW3hdWzBdIT1pKXsKICAgICAgICAgICAgICAgICAgICBxMi5wYihwb3MyW3hdWzBdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHBvczJbeF1bMV0hPWkpewogICAgICAgICAgICAgICAgICAgIHEyLnBiKHBvczJbeF1bMV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYocG9zM1t5XVswXSE9aSl7CiAgICAgICAgICAgICAgICAgICAgcTMucGIocG9zM1t5XVswXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihwb3MzW3ldWzFdIT1pKXsKICAgICAgICAgICAgICAgICAgICBxMy5wYihwb3MzW3ldWzFdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHEyLnNpemUoKT4xfHxxMy5zaXplKCk+MSl7CiAgICAgICAgICAgICAgICAgICAgYW5zPW1heChhbnMsYVtpXSt4K3kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgICAgICBpZihxMlswXT09cTNbMF0pewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgeDE9eCx5MT0wLHgyPTAseTI9eSxqMT1xMlswXSxqMj1xM1swXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoajE8aSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1qMS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLDEsajEtMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajErMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLGoxKzEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4saSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGk8ajEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MT1tYXgoeTEsZ2V0KHQzLDEsMSxuLDEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PWoxLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4saSsxLGoxLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoxKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxPW1heCh5MSxnZXQodDMsMSwxLG4sajErMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoajI8aSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigxPD1qMi0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLDEsajItMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoajIrMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLGoyKzEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4saSsxLG4pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGk8ajIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoMTw9aS0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Mj1tYXgoeDIsZ2V0KHQyLDEsMSxuLDEsaS0xKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpKzE8PWoyLTEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4saSsxLGoyLTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGoyKzE8PW4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyPW1heCh4MixnZXQodDIsMSwxLG4sajIrMSxuKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYW5zPW1heCh7YW5zLGFbaV0reDEreTEsYVtpXSt4Mit5Mn0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgICAgICBhbnM9bWF4KGFucyxhW2ldK3greSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGFuczw8J1xuJzsKICAgIH0KfQ==