#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; flags.assign(4*sz+4,1); buildTree(1,0,sz-1);}
vi st,A,flags,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()
{
/* vi A({1,1,1,0,0,0,0,0,0});
segTree st(A,A.size());
st.update(1,0,A.size()-1,0,2,-1);
//st.update(1,0,A.size()-1,0,1,-1);
cout<<st.query(1,0,A.size()-1,0,2);
*/
int t;
cin>>t;
for(int test=1;test<=t;++test)
{
int m;
cin>>m;
string s;
while(m--)
{
int T;
cin>>T;
string temp;
cin>>temp;
while(T--)
s.append(temp);
}
int n = s.size();
vi temp(n,0);
for(int i=0;i<n;++i)
temp[i] = s[i] - 48;
segTree st(temp,n);
int q;
cin>>q;
int asks = 1;
printf("Case %d:\n",test);
while(q--)
{
char c;
int i,j;
cin>>c>>i>>j;
if(c=='F')
{
st.update(1,0,n-1,i,j,1);
}
else if(c=='E')
{
st.update(1,0,n-1,i,j,0);
}
else if(c == 'I')
{
st.update(1,0,n-1,i,j,-1);
}
else if(c=='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];
flags[p] = 1;
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;
flags[p] = 1;
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKY2xhc3Mgc2VnVHJlZXsKcHVibGljOgogICAgc2VnVHJlZSh2aSAmbWFpbixpbnQgc3ope21hcmtlcnMuYXNzaWduKDQqc3orNCwwKTsgbGF6eS5hc3NpZ24oNCpzeis0LDApOyBzdC5hc3NpZ24oNCpzeis0LDApOyBBPW1haW47IGZsYWdzLmFzc2lnbig0KnN6KzQsMSk7IGJ1aWxkVHJlZSgxLDAsc3otMSk7fQoJdmkgc3QsQSxmbGFncyxsYXp5OwoJdmVjdG9yPGJvb2w+IG1hcmtlcnM7CglpbnQgYnVpbGRUcmVlKGludCxpbnQsaW50KTsKCWludCBxdWVyeShpbnQsaW50LGludCxpbnQsaW50KTsKCWludCB1cGRhdGUoaW50LGludCxpbnQsaW50LGludCxpbnQpOwoJaW50IGxlZnQoaW50IHApe3JldHVybiAocDw8MSk7fQoJaW50IHJpZ2h0KGludCBwKXsgcmV0dXJuIChwPDwxKSsxO30KCQp9OwppbnQgbWFpbigpCnsKCi8qCXZpIEEoezEsMSwxLDAsMCwwLDAsMCwwfSk7CgkKCXNlZ1RyZWUgc3QoQSxBLnNpemUoKSk7CglzdC51cGRhdGUoMSwwLEEuc2l6ZSgpLTEsMCwyLC0xKTsKCS8vc3QudXBkYXRlKDEsMCxBLnNpemUoKS0xLDAsMSwtMSk7Cgljb3V0PDxzdC5xdWVyeSgxLDAsQS5zaXplKCktMSwwLDIpOwoqLwoJaW50IHQ7CgljaW4+PnQ7Cglmb3IoaW50IHRlc3Q9MTt0ZXN0PD10OysrdGVzdCkKCXsJCgkJaW50IG07CgkJY2luPj5tOwoJCXN0cmluZyBzOwoJCXdoaWxlKG0tLSkKCQl7CgkJCWludCBUOwoJCQljaW4+PlQ7CgkJCXN0cmluZyB0ZW1wOwoJCQljaW4+PnRlbXA7CgkJCXdoaWxlKFQtLSkKCQkJCXMuYXBwZW5kKHRlbXApOwoJCX0KCQlpbnQgbiA9IHMuc2l6ZSgpOwoJCXZpIHRlbXAobiwwKTsKCQlmb3IoaW50IGk9MDtpPG47KytpKQoJCQl0ZW1wW2ldID0gc1tpXSAtIDQ4OwoJCXNlZ1RyZWUgc3QodGVtcCxuKTsKCQkKCQlpbnQgcTsKCQljaW4+PnE7CgkJaW50IGFza3MgPSAxOwoJCXByaW50ZigiQ2FzZSAlZDpcbiIsdGVzdCk7CgkJd2hpbGUocS0tKQoJCXsKCQkJY2hhciBjOwoJCQlpbnQgaSxqOwoJCQljaW4+PmM+Pmk+Pmo7CgkJCWlmKGM9PSdGJykKCQkJewoJCQkJc3QudXBkYXRlKDEsMCxuLTEsaSxqLDEpOwoJCQkKCQkJfQoJCQllbHNlIGlmKGM9PSdFJykKCQkJewoJCQkJc3QudXBkYXRlKDEsMCxuLTEsaSxqLDApOwoJCQl9CgkJCWVsc2UgaWYoYyA9PSAnSScpCgkJCXsKCQkJCXN0LnVwZGF0ZSgxLDAsbi0xLGksaiwtMSk7CgkJCX0KCQkJZWxzZSBpZihjPT0nUycpCgkJCQlwcmludGYoIlElZDogJWRcbiIsYXNrcysrLHN0LnF1ZXJ5KDEsMCxuLTEsaSxqKSk7CgkJCgkJfQoJCQoJCQoJCQoJCQoJCgkKCQoJfQkKCQkKCQkJCn0KCgoKaW50IHNlZ1RyZWU6OmJ1aWxkVHJlZShpbnQgcCxpbnQgTCxpbnQgUikKewoJaWYoTD09UikKCXsgCQoJCXN0W3BdID0gQVtMXTsKCQlmbGFnc1twXSA9IDE7IAoJCXJldHVybiBzdFtwXTsgCgl9CgkKCWludCBhID0gYnVpbGRUcmVlKGxlZnQocCksTCwoTCtSKS8yKSAsIGIgPSBidWlsZFRyZWUocmlnaHQocCksKEwrUikvMisxLFIpOwoJc3RbcF0gPSBhK2I7CglmbGFnc1twXSA9IDE7CglyZXR1cm4gc3RbcF07CgkKfQoKaW50IHNlZ1RyZWU6OnF1ZXJ5KGludCBwLGludCBMLGludCBSLGludCBpLGludCBqKQp7CgoJaWYoajxMfHxpPlIpIHJldHVybiAtMTsKCWlmKG1hcmtlcnNbcF0pCgl7CgkJaWYobGF6eVtwXSA9PSAxKQoJCXsKCQkJc3RbcF0gPSBSIC0gTCArIDE7CgkJCWlmKEwhPVIpewoJCQlsYXp5W2xlZnQocCldID0gMTsKCQkJbGF6eVtyaWdodChwKV0gPSAxOwoJCQltYXJrZXJzW2xlZnQocCldID0gMTsKCQkJbWFya2Vyc1tyaWdodChwKV0gPSAxOwoJCX0KCQl9CgkJZWxzZSBpZihsYXp5W3BdID09IDApCgkJewoJCQlzdFtwXSA9IDA7CgkJaWYoTCE9UikKCQl7CgkJCWxhenlbbGVmdChwKV0gPSAwOwoJCQlsYXp5W3JpZ2h0KHApXSA9IDA7CgkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDE7CgkJfQoJCX0KCQllbHNlIGlmKGxhenlbcF0gPT0gLTEpCgkJewoJCQlzdFtwXSA9IChSLUwrMSkgLSBzdFtwXTsKCQkJaWYoTCE9UikKCQkJewoJCQkJaWYoIW1hcmtlcnNbbGVmdChwKV0pCgkJCQl7CgkJCQkJbGF6eVtsZWZ0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWlmKGxhenlbbGVmdChwKV0gPT0gMSkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldPT0gMCkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDE7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW2xlZnQocCldID0gMDsgCgkJCQkKCQkJCX0KCQkJCWlmKCFtYXJrZXJzW3JpZ2h0KHApXSkKCQkJCXsKCQkJCQlsYXp5W3JpZ2h0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbcmlnaHQocCldID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlpZihsYXp5W3JpZ2h0KHApXSA9PSAxKQoJCQkJCQlsYXp5W3JpZ2h0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W3JpZ2h0KHApXT09IDApCgkJCQkJCWxhenlbcmlnaHQocCldID0gMTsKCQkJCQllbHNlIGlmKGxhenlbcmlnaHQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDA7IAoJCQkJCgkJCQl9CgkJCgkJCX0JCgkKCQoJCX0KCQoJCgl9CgltYXJrZXJzW3BdID0gMDsKCWlmKGo8THx8aT5SKSByZXR1cm4gLTE7CglpZihMID49IGkgJiYgUiA8PSBqKQoJeyAJCgkJcmV0dXJuIHN0W3BdOyAKCX0KCWludCBhID0gcXVlcnkobGVmdChwKSxMLChMK1IpLzIsaSxqKTsKCWludCBiID0gcXVlcnkocmlnaHQocCksKEwrUikvMisxLFIsaSxqKTsKCWlmKGE9PS0xKQoJCXJldHVybiBiOwoJaWYoYj09LTEpCgkJcmV0dXJuIGE7CQoJCglyZXR1cm4gYStiOwoKfQoKCmludCBzZWdUcmVlOjp1cGRhdGUoaW50IHAsaW50IEwsaW50IFIsaW50IGksaW50IGosaW50IHYpCnsKCWlmKG1hcmtlcnNbcF0pCgl7CgkJaWYobGF6eVtwXSA9PSAxKQoJCXsKCQkJc3RbcF0gPSBSIC0gTCArIDE7CgkJCWlmKEwhPVIpewoJCQlsYXp5W2xlZnQocCldID0gMTsKCQkJbGF6eVtyaWdodChwKV0gPSAxOwoJCQltYXJrZXJzW2xlZnQocCldID0gMTsKCQkJbWFya2Vyc1tyaWdodChwKV0gPSAxOwoJCX0KCQl9CgkJZWxzZSBpZihsYXp5W3BdID09IDApCgkJewoJCQlzdFtwXSA9IDA7CgkJaWYoTCE9UikKCQl7CgkJCWxhenlbbGVmdChwKV0gPSAwOwoJCQlsYXp5W3JpZ2h0KHApXSA9IDA7CgkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDE7CgkJfQoJCX0KCQllbHNlIGlmKGxhenlbcF0gPT0gLTEpCgkJewoJCQlzdFtwXSA9IChSLUwrMSkgLSBzdFtwXTsKCQkJaWYoTCE9UikKCQkJewoJCQkJaWYoIW1hcmtlcnNbbGVmdChwKV0pCgkJCQl7CgkJCQkJbGF6eVtsZWZ0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWlmKGxhenlbbGVmdChwKV0gPT0gMSkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldPT0gMCkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDE7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW2xlZnQocCldID0gMDsgCgkJCQkKCQkJCX0KCQkJCWlmKCFtYXJrZXJzW3JpZ2h0KHApXSkKCQkJCXsKCQkJCQlsYXp5W3JpZ2h0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbcmlnaHQocCldID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlpZihsYXp5W3JpZ2h0KHApXSA9PSAxKQoJCQkJCQlsYXp5W3JpZ2h0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W3JpZ2h0KHApXT09IDApCgkJCQkJCWxhenlbcmlnaHQocCldID0gMTsKCQkJCQllbHNlIGlmKGxhenlbcmlnaHQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDA7IAoJCQkJCgkJCQl9CgkJCgkJCX0JCgkKCQoJCX0KCQoJCgl9CgltYXJrZXJzW3BdID0gMDsKCWlmKEwgPj0gaSAmJiBSIDw9IGopCgl7CgkJaWYodj09MSkKCQl7CgkJCXN0W3BdID0gUi1MKzE7CgkJaWYoTCE9Uil7CgkJCWxhenlbbGVmdChwKV0gPSAxOwoJCQlsYXp5W3JpZ2h0KHApXSA9IDE7CgkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDE7CgkJfQoJCX0KCQllbHNlIGlmKHYgPT0gMCkKCQl7CgkJCXN0W3BdID0gMDsKCQlpZihMIT1SKXsKCQkJbGF6eVtsZWZ0KHApXSA9IDA7CgkJCWxhenlbcmlnaHQocCldID0gMDsKCQkJbWFya2Vyc1tsZWZ0KHApXSA9IDE7CgkJCW1hcmtlcnNbcmlnaHQocCldID0gMTsKCQl9CgkJfQoJCWVsc2UgaWYodiA9PSAtMSkKCQl7CgkJCXN0W3BdID0gKFIgLSBMICsgMSkgLSBzdFtwXTsKCQkJaWYoTCE9UikKCQkJewoJCQkJaWYoIW1hcmtlcnNbbGVmdChwKV0pCgkJCQl7CgkJCQkJbGF6eVtsZWZ0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbbGVmdChwKV0gPSAxOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWlmKGxhenlbbGVmdChwKV0gPT0gMSkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldPT0gMCkKCQkJCQkJbGF6eVtsZWZ0KHApXSA9IDE7CgkJCQkJZWxzZSBpZihsYXp5W2xlZnQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW2xlZnQocCldID0gMDsgCgkJCQkKCQkJCX0KCQkJCWlmKCFtYXJrZXJzW3JpZ2h0KHApXSkKCQkJCXsKCQkJCQlsYXp5W3JpZ2h0KHApXSA9IC0xOwoJCQkJCW1hcmtlcnNbcmlnaHQocCldID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlpZihsYXp5W3JpZ2h0KHApXSA9PSAxKQoJCQkJCQlsYXp5W3JpZ2h0KHApXSA9IDA7CgkJCQkJZWxzZSBpZihsYXp5W3JpZ2h0KHApXT09IDApCgkJCQkJCWxhenlbcmlnaHQocCldID0gMTsKCQkJCQllbHNlIGlmKGxhenlbcmlnaHQocCldID09IC0xKQoJCQkJCQltYXJrZXJzW3JpZ2h0KHApXSA9IDA7IAoJCQkJCgkJCQl9CgkJCgkJCX0KCQkKCQl9CgkJCgkJcmV0dXJuIHN0W3BdOwoJfQoJaWYoTD09UikKCQlyZXR1cm4gc3RbcF07CglpbnQgYSA9IHVwZGF0ZShsZWZ0KHApLEwsKEwrUikvMixpLGosdik7CglpbnQgYiA9IHVwZGF0ZShyaWdodChwKSwoTCtSKS8yKzEsUixpLGosdik7CglzdFtwXSA9IGErYjsKCXJldHVybiBhK2I7Cn0KCgoK