#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
typedef vector<int> vi;
class bit{
public:
bit(int n,string strt):s(strt){ ftBuc.assign(n+2,0); }
void adjust(int k,int v){
if(v=='1'&&s[k] == '1')
return;
else if(v=='0' && s[k] == '0')
return;
else if(v=='1'&&s[k] == '0')
{ s[k] = '1'; for(;k<(int)ftBuc.size();k += leastSig1(k)) ftBuc[k]+=1; }
else if(v=='0' && s[k] == '1' )
{ s[k] = '0'; for(;k<(int)ftBuc.size();k += leastSig1(k)) ftBuc[k]-=1; }
}
int rsq(int a,int b) { return rsq(b)-(a==1?0:rsq(a-1));}
string s;
int rsq(int b) { int sum = 0; for(; b ; b-=leastSig1(b)) sum+=ftBuc[b]; return sum;}
vi ftBuc;
int leastSig1(int i) {return i&(-i);}
};
int main()
{
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();
bit ft(n+2,string(n+2,'0'));
for(int i = 1;i<=n;++i)
ft.adjust(i,s[i-1]);
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')
{
for(int k=i+1;k<=j+1;++k)
ft.adjust(k,'1');
}
else if(c=='E')
{
for(int k=i+1;k<=j+1;++k)
ft.adjust(k,'0');
}
else if(c == 'I')
{
for(int k=i+1;k<=j+1;++k)
{
if(ft.s[k] == '1')
ft.adjust(k,'0');
else
ft.adjust(k,'1');
}
}
else if(c=='S')
printf("Q%d: %d\n",asks++,ft.rsq(i+1,j+1));
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKY2xhc3MgYml0ewpwdWJsaWM6CiAgICBiaXQoaW50IG4sc3RyaW5nIHN0cnQpOnMoc3RydCl7IGZ0QnVjLmFzc2lnbihuKzIsMCk7IH0KCXZvaWQgYWRqdXN0KGludCBrLGludCB2KXsKCQoJaWYodj09JzEnJiZzW2tdID09ICcxJykKCQlyZXR1cm47CgllbHNlIGlmKHY9PScwJyAmJiBzW2tdID09ICcwJykKCQlyZXR1cm47CgllbHNlIGlmKHY9PScxJyYmc1trXSA9PSAnMCcpCgkJeyBzW2tdID0gJzEnOwlmb3IoO2s8KGludClmdEJ1Yy5zaXplKCk7ayArPSBsZWFzdFNpZzEoaykpIGZ0QnVjW2tdKz0xOyB9CgllbHNlIGlmKHY9PScwJyAmJiBzW2tdID09ICcxJyApCgkJeyBzW2tdID0gJzAnOwlmb3IoO2s8KGludClmdEJ1Yy5zaXplKCk7ayArPSBsZWFzdFNpZzEoaykpIGZ0QnVjW2tdLT0xOyB9Cgl9CglpbnQgcnNxKGludCBhLGludCBiKSB7IHJldHVybiByc3EoYiktKGE9PTE/MDpyc3EoYS0xKSk7fQoJc3RyaW5nIHM7CglpbnQgcnNxKGludCBiKSB7IGludCBzdW0gPSAwOyBmb3IoOyBiIDsgYi09bGVhc3RTaWcxKGIpKSBzdW0rPWZ0QnVjW2JdOyByZXR1cm4gc3VtO30KCXZpIGZ0QnVjOwoJaW50IGxlYXN0U2lnMShpbnQgaSkge3JldHVybiBpJigtaSk7fQoJCn07CmludCBtYWluKCkKewoJaW50IHQ7CgljaW4+PnQ7Cglmb3IoaW50IHRlc3Q9MTt0ZXN0PD10OysrdGVzdCkKCXsJCgkJaW50IG07CgkJY2luPj5tOwoJCXN0cmluZyBzOwoJCXdoaWxlKG0tLSkKCQl7CgkJCWludCBUOwoJCQljaW4+PlQ7CgkJCXN0cmluZyB0ZW1wOwoJCQljaW4+PnRlbXA7CgkJCXdoaWxlKFQtLSkKCQkJCXMuYXBwZW5kKHRlbXApOwoJCX0KCQlpbnQgbiA9IHMuc2l6ZSgpOwoJCWJpdCBmdChuKzIsc3RyaW5nKG4rMiwnMCcpKTsKCQlmb3IoaW50IGkgPSAxO2k8PW47KytpKQoJCQlmdC5hZGp1c3QoaSxzW2ktMV0pOwoJCWludCBxOwoJCWNpbj4+cTsKCQlpbnQgYXNrcyA9IDE7CgkJcHJpbnRmKCJDYXNlICVkOlxuIix0ZXN0KTsKCQl3aGlsZShxLS0pCgkJewoJCQljaGFyIGM7CgkJCWludCBpLGo7CgkJCWNpbj4+Yz4+aT4+ajsKCQkJaWYoYz09J0YnKQoJCQl7CgkJCQlmb3IoaW50IGs9aSsxO2s8PWorMTsrK2spCgkJCQkJZnQuYWRqdXN0KGssJzEnKTsKCQkJCgkJCX0KCQkJZWxzZSBpZihjPT0nRScpCgkJCXsKCQkJCWZvcihpbnQgaz1pKzE7azw9aisxOysraykKCQkJCQlmdC5hZGp1c3QoaywnMCcpOwoJCQl9CgkJCWVsc2UgaWYoYyA9PSAnSScpCgkJCXsKCQkJCWZvcihpbnQgaz1pKzE7azw9aisxOysraykKCQkJCXsKCQkJCQlpZihmdC5zW2tdID09ICcxJykKCQkJCQkJZnQuYWRqdXN0KGssJzAnKTsKCQkJCQllbHNlCgkJCQkJCWZ0LmFkanVzdChrLCcxJyk7CgkJCQkKCQkJCX0KCQkJfQoJCQllbHNlIGlmKGM9PSdTJykKCQkJCXByaW50ZigiUSVkOiAlZFxuIixhc2tzKyssZnQucnNxKGkrMSxqKzEpKTsKCQkKCQl9CgkJCgkJCgkJCgkJCgkKCQoJCgl9CQkKCQkJCgp9