#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
typedef vector<int> vi;
class segTree{
public:
segTree(vi &main,int sz){markers.assign(4*sz+4,0); lazy.assign(4*sz+4,0); st.assign(4*sz+4,0); A=main; buildTree(1,0,sz-1);}
vi st,A,lazy;
vector<bool> markers;
int buildTree(int,int,int);
int query(int,int,int,int,int);
int update(int,int,int,int,int,int);
int left(int p){return (p<<1);}
int right(int p){ return (p<<1)+1;}
};
int main()
{
int t;
scanf("%d",&t);
for(int test=1;test<=t;++test)
{
int m;
scanf("%d",&m);
vi temp(1024001,0);
int n = 0;
while(m--)
{
int T;
scanf("%d",&T);
char s[65];
scanf("%s",s);
while(T--)
{
for(int i=0;s[i];++i)
temp[n++] = s[i]-48;
}
}
segTree st(temp,n);
int q;
scanf("%d",&q);
cout<<q;
int asks = 1;
printf("Case %d:\n",test);
while(q--)
{
char c[4];
int i,j;
scanf("%s%d%d",c,&i,&j);
switch(c[0]){
case 'F':st.update(1,0,n-1,i,j,1); break;
case 'E':st.update(1,0,n-1,i,j,0); break;
case 'I':st.update(1,0,n-1,i,j,-1); break;
case 'S':printf("Q%d: %d\n",asks++,st.query(1,0,n-1,i,j));
}
}
}
}
int segTree::buildTree(int p,int L,int R)
{
if(L==R)
{
st[p] = A[L];
return st[p];
}
int a = buildTree(left(p),L,(L+R)/2) , b = buildTree(right(p),(L+R)/2+1,R);
st[p] = a+b;
return st[p];
}
int segTree::query(int p,int L,int R,int i,int j)
{
if(j<L||i>R) return -1;
if(markers[p])
{
if(lazy[p] == 1)
{
st[p] = R - L + 1;
if(L!=R){
lazy[left(p)] = 1;
lazy[right(p)] = 1;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(lazy[p] == 0)
{
st[p] = 0;
if(L!=R)
{
lazy[left(p)] = 0;
lazy[right(p)] = 0;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(lazy[p] == -1)
{
st[p] = (R-L+1) - st[p];
if(L!=R)
{
if(!markers[left(p)])
{
lazy[left(p)] = -1;
markers[left(p)] = 1;
}
else
{
if(lazy[left(p)] == 1)
lazy[left(p)] = 0;
else if(lazy[left(p)]== 0)
lazy[left(p)] = 1;
else if(lazy[left(p)] == -1)
markers[left(p)] = 0;
}
if(!markers[right(p)])
{
lazy[right(p)] = -1;
markers[right(p)] = 1;
}
else
{
if(lazy[right(p)] == 1)
lazy[right(p)] = 0;
else if(lazy[right(p)]== 0)
lazy[right(p)] = 1;
else if(lazy[right(p)] == -1)
markers[right(p)] = 0;
}
}
}
}
markers[p] = 0;
if(j<L||i>R) return -1;
if(L >= i && R <= j)
{
return st[p];
}
int a = query(left(p),L,(L+R)/2,i,j);
int b = query(right(p),(L+R)/2+1,R,i,j);
if(a==-1)
return b;
if(b==-1)
return a;
return a+b;
}
int segTree::update(int p,int L,int R,int i,int j,int v)
{
if(markers[p])
{
if(lazy[p] == 1)
{
st[p] = R - L + 1;
if(L!=R){
lazy[left(p)] = 1;
lazy[right(p)] = 1;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(lazy[p] == 0)
{
st[p] = 0;
if(L!=R)
{
lazy[left(p)] = 0;
lazy[right(p)] = 0;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(lazy[p] == -1)
{
st[p] = (R-L+1) - st[p];
if(L!=R)
{
if(!markers[left(p)])
{
lazy[left(p)] = -1;
markers[left(p)] = 1;
}
else
{
if(lazy[left(p)] == 1)
lazy[left(p)] = 0;
else if(lazy[left(p)]== 0)
lazy[left(p)] = 1;
else if(lazy[left(p)] == -1)
markers[left(p)] = 0;
}
if(!markers[right(p)])
{
lazy[right(p)] = -1;
markers[right(p)] = 1;
}
else
{
if(lazy[right(p)] == 1)
lazy[right(p)] = 0;
else if(lazy[right(p)]== 0)
lazy[right(p)] = 1;
else if(lazy[right(p)] == -1)
markers[right(p)] = 0;
}
}
}
}
markers[p] = 0;
if(L >= i && R <= j)
{
if(v==1)
{
st[p] = R-L+1;
if(L!=R){
lazy[left(p)] = 1;
lazy[right(p)] = 1;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(v == 0)
{
st[p] = 0;
if(L!=R){
lazy[left(p)] = 0;
lazy[right(p)] = 0;
markers[left(p)] = 1;
markers[right(p)] = 1;
}
}
else if(v == -1)
{
st[p] = (R - L + 1) - st[p];
if(L!=R)
{
if(!markers[left(p)])
{
lazy[left(p)] = -1;
markers[left(p)] = 1;
}
else
{
if(lazy[left(p)] == 1)
lazy[left(p)] = 0;
else if(lazy[left(p)]== 0)
lazy[left(p)] = 1;
else if(lazy[left(p)] == -1)
markers[left(p)] = 0;
}
if(!markers[right(p)])
{
lazy[right(p)] = -1;
markers[right(p)] = 1;
}
else
{
if(lazy[right(p)] == 1)
lazy[right(p)] = 0;
else if(lazy[right(p)]== 0)
lazy[right(p)] = 1;
else if(lazy[right(p)] == -1)
markers[right(p)] = 0;
}
}
}
return st[p];
}
if(L==R)
return st[p];
int a = update(left(p),L,(L+R)/2,i,j,v);
int b = update(right(p),(L+R)/2+1,R,i,j,v);
st[p] = a+b;
return a+b;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKY2xhc3Mgc2VnVHJlZXsKcHVibGljOgogICAgc2VnVHJlZSh2aSAmbWFpbixpbnQgc3ope21hcmtlcnMuYXNzaWduKDQqc3orNCwwKTsgbGF6eS5hc3NpZ24oNCpzeis0LDApOyBzdC5hc3NpZ24oNCpzeis0LDApOyBBPW1haW47IGJ1aWxkVHJlZSgxLDAsc3otMSk7fQogICAgICAgIHZpIHN0LEEsbGF6eTsKICAgICAgICB2ZWN0b3I8Ym9vbD4gbWFya2VyczsKICAgICAgICBpbnQgYnVpbGRUcmVlKGludCxpbnQsaW50KTsKICAgICAgICBpbnQgcXVlcnkoaW50LGludCxpbnQsaW50LGludCk7CiAgICAgICAgaW50IHVwZGF0ZShpbnQsaW50LGludCxpbnQsaW50LGludCk7CiAgICAgICAgaW50IGxlZnQoaW50IHApe3JldHVybiAocDw8MSk7fQogICAgICAgIGludCByaWdodChpbnQgcCl7IHJldHVybiAocDw8MSkrMTt9CiAgICAgICAgCn07CmludCBtYWluKCkKewogCiAgIAoKICAgICAgICBpbnQgdDsKICAgICAgICBzY2FuZigiJWQiLCZ0KTsKICAgICAgICBmb3IoaW50IHRlc3Q9MTt0ZXN0PD10OysrdGVzdCkKICAgICAgICB7ICAgICAgIAogICAgICAgICAgICAgICAgaW50IG07CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZtKTsKICAgICAgICAgICAgICAgIHZpIHRlbXAoMTAyNDAwMSwwKTsKICAgICAgICAgICAgICAgIGludCBuID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlKG0tLSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IFQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsJlQpOwogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHNbNjVdOwogICAgICAgICAgICAgICAgICAgICAgICBzY2FuZigiJXMiLHMpOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShULS0pCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7c1tpXTsrK2kpCiAgICAJCQkJCQl0ZW1wW24rK10gPSBzW2ldLTQ4OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNlZ1RyZWUgc3QodGVtcCxuKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW50IHE7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQiLCZxKTsKICAgICAgICAgICAgICAgIGNvdXQ8PHE7CiAgICAgICAgICAgICAgICBpbnQgYXNrcyA9IDE7CiAgICAgICAgICAgICAgICBwcmludGYoIkNhc2UgJWQ6XG4iLHRlc3QpOwogICAgICAgICAgICAgICAgd2hpbGUocS0tKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNbNF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBpLGo7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlcyVkJWQiLGMsJmksJmopOwogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChjWzBdKXsKCQkJCQkJCWNhc2UgJ0YnOnN0LnVwZGF0ZSgxLDAsbi0xLGksaiwxKTsgYnJlYWs7CgkJCQkJCQljYXNlICdFJzpzdC51cGRhdGUoMSwwLG4tMSxpLGosMCk7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSSc6c3QudXBkYXRlKDEsMCxuLTEsaSxqLC0xKTsgYnJlYWs7CgkJCQkJCQljYXNlICdTJzpwcmludGYoIlElZDogJWRcbiIsYXNrcysrLHN0LnF1ZXJ5KDEsMCxuLTEsaSxqKSk7CgkJCQkJCQl9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgfSAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAKfQogCiAKIAppbnQgc2VnVHJlZTo6YnVpbGRUcmVlKGludCBwLGludCBMLGludCBSKQp7CiAgICAgICAgaWYoTD09UikKICAgICAgICB7ICAgICAgIAogICAgICAgICAgICAgICAgc3RbcF0gPSBBW0xdOyAKICAgICAgICAgICAgICAgIHJldHVybiBzdFtwXTsgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBhID0gYnVpbGRUcmVlKGxlZnQocCksTCwoTCtSKS8yKSAsIGIgPSBidWlsZFRyZWUocmlnaHQocCksKEwrUikvMisxLFIpOwogICAgICAgIHN0W3BdID0gYStiOwogICAgICAgIHJldHVybiBzdFtwXTsKICAgICAgICAKfQogCmludCBzZWdUcmVlOjpxdWVyeShpbnQgcCxpbnQgTCxpbnQgUixpbnQgaSxpbnQgaikKewogCiAgICAgICAgaWYoajxMfHxpPlIpIHJldHVybiAtMTsKICAgICAgICBpZihtYXJrZXJzW3BdKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGxhenlbcF0gPT0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RbcF0gPSBSIC0gTCArIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEwhPVIpewogICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W3BdID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0W3BdID0gMDsKICAgICAgICAgICAgICAgIGlmKEwhPVIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbbGVmdChwKV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBsYXp5W3JpZ2h0KHApXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbbGVmdChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW3JpZ2h0KHApXSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmKGxhenlbcF0gPT0gLTEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0W3BdID0gKFItTCsxKSAtIHN0W3BdOwogICAgICAgICAgICAgICAgICAgICAgICBpZihMIT1SKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW1hcmtlcnNbbGVmdChwKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtsZWZ0KHApXSA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tsZWZ0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsYXp5W2xlZnQocCldID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbbGVmdChwKV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W2xlZnQocCldPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtsZWZ0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGxhenlbbGVmdChwKV0gPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbbGVmdChwKV0gPSAwOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIW1hcmtlcnNbcmlnaHQocCldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbcmlnaHQocCldID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW3JpZ2h0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihsYXp5W3JpZ2h0KHApXSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W3JpZ2h0KHApXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGxhenlbcmlnaHQocCldPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W3JpZ2h0KHApXSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAwOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICB9CiAgICAgICAgbWFya2Vyc1twXSA9IDA7CiAgICAgICAgaWYoajxMfHxpPlIpIHJldHVybiAtMTsKICAgICAgICBpZihMID49IGkgJiYgUiA8PSBqKQogICAgICAgIHsgICAgICAgCiAgICAgICAgICAgICAgICByZXR1cm4gc3RbcF07IAogICAgICAgIH0KICAgICAgICBpbnQgYSA9IHF1ZXJ5KGxlZnQocCksTCwoTCtSKS8yLGksaik7CiAgICAgICAgaW50IGIgPSBxdWVyeShyaWdodChwKSwoTCtSKS8yKzEsUixpLGopOwogICAgICAgIGlmKGE9PS0xKQogICAgICAgICAgICAgICAgcmV0dXJuIGI7CiAgICAgICAgaWYoYj09LTEpCiAgICAgICAgICAgICAgICByZXR1cm4gYTsgICAgICAgCiAgICAgICAgCiAgICAgICAgcmV0dXJuIGErYjsKIAp9CiAKIAppbnQgc2VnVHJlZTo6dXBkYXRlKGludCBwLGludCBMLGludCBSLGludCBpLGludCBqLGludCB2KQp7CiAgICAgICAgaWYobWFya2Vyc1twXSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihsYXp5W3BdID09IDEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0W3BdID0gUiAtIEwgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZihMIT1SKXsKICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtsZWZ0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbcmlnaHQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tsZWZ0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbcmlnaHQocCldID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYobGF6eVtwXSA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdFtwXSA9IDA7CiAgICAgICAgICAgICAgICBpZihMIT1SKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W3BdID09IC0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdFtwXSA9IChSLUwrMSkgLSBzdFtwXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoTCE9UikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFtYXJrZXJzW2xlZnQocCldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbbGVmdChwKV0gPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbbGVmdChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGF6eVtsZWZ0KHApXSA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobGF6eVtsZWZ0KHApXT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbbGVmdChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W2xlZnQocCldID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMDsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFtYXJrZXJzW3JpZ2h0KHApXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W3JpZ2h0KHApXSA9IC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGF6eVtyaWdodChwKV0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihsYXp5W3JpZ2h0KHApXT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbcmlnaHQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobGF6eVtyaWdodChwKV0gPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbcmlnaHQocCldID0gMDsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgfQogICAgICAgIG1hcmtlcnNbcF0gPSAwOwogICAgICAgIGlmKEwgPj0gaSAmJiBSIDw9IGopCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYodj09MSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RbcF0gPSBSLUwrMTsKICAgICAgICAgICAgICAgIGlmKEwhPVIpewogICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZih2ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0W3BdID0gMDsKICAgICAgICAgICAgICAgIGlmKEwhPVIpewogICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tyaWdodChwKV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZih2ID09IC0xKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdFtwXSA9IChSIC0gTCArIDEpIC0gc3RbcF07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEwhPVIpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighbWFya2Vyc1tsZWZ0KHApXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhenlbbGVmdChwKV0gPT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtsZWZ0KHApXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGxhenlbbGVmdChwKV09PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W2xlZnQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobGF6eVtsZWZ0KHApXSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vyc1tsZWZ0KHApXSA9IDA7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighbWFya2Vyc1tyaWdodChwKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVtyaWdodChwKV0gPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnNbcmlnaHQocCldID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxhenlbcmlnaHQocCldID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenlbcmlnaHQocCldID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYobGF6eVtyaWdodChwKV09PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXp5W3JpZ2h0KHApXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGxhenlbcmlnaHQocCldID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJzW3JpZ2h0KHApXSA9IDA7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIHN0W3BdOwogICAgICAgIH0KICAgICAgICBpZihMPT1SKQogICAgICAgICAgICAgICAgcmV0dXJuIHN0W3BdOwogICAgICAgIGludCBhID0gdXBkYXRlKGxlZnQocCksTCwoTCtSKS8yLGksaix2KTsKICAgICAgICBpbnQgYiA9IHVwZGF0ZShyaWdodChwKSwoTCtSKS8yKzEsUixpLGosdik7CiAgICAgICAgc3RbcF0gPSBhK2I7CiAgICAgICAgcmV0dXJuIGErYjsKfQog