#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
int T, m, t, q, a, b, n, o, cnt, res;
string str, s;
char ch;
int segtree[2100000], operation[2100000];
string op = "NEFI";
void lazy_propagation (int v, int l, int r)
{
if (operation[v])
{
if (operation[v] == 1)
segtree[v] = 0, operation[2*v] = operation[2*v+1] = 1;
else if (operation[v] == 2)
segtree[v] = r-l+1, operation[2*v] = operation[2*v+1] = 2;
else
{
segtree[v] = (r-l+1) - segtree[v];
operation[2*v] = 3-operation[2*v], operation[2*v+1] = 3-operation[2*v+1];
}
operation[v] = 0;
}
}
void create (int v, int l, int r)
{
if (l == r)
segtree[v] = str[l] - '0';
else
{
create(2*v, l, (l+r)/2);
create(2*v+1, (l+r)/2+1, r);
segtree[v] = segtree[2*v] + segtree[2*v+1];
}
}
void update (int v, int l, int r)
{
lazy_propagation(v, l, r);
if (l > b || r < a) return;
if (a <= l && r <= b)
{
operation[v] = o;
lazy_propagation(v, l, r);
return;
}
update(2*v, l, (l+r)/2);
update(2*v+1, (l+r)/2+1, r);
segtree[v] = segtree[2*v] + segtree[2*v+1];
}
int query (int v, int l, int r)
{
lazy_propagation(v, l, r);
if (l > b || r < a) return 0;
if (a <= l && r <= b) return segtree[v];
return query(2*v, l, (l+r)/2) + query(2*v+1, (l+r)/2+1, r);
}
int main ()
{
scanf("%d", &T);
for (int I = 1; I <= T && scanf("%d", &m) == 1; ++I)
{
printf("Case %d:\n", I);
str = "";
for (int J = 0; J < m; ++J)
{
scanf("%d", &t);
cin >> s;
while (t--) str += s;
}
n = str.length();
create(1, 0, n-1);
memset(operation, 0, sizeof operation);
scanf("%d", &q);
cnt = 0;
for (int J = 1; J <= q; ++J)
{
cin >> ch >> a >> b;
if (ch == 'S')
{
res = query(1, 0, n-1);
printf("Q%d: %d\n", ++cnt, res);
}
else
{
if (ch == 'E')
o = 1;
else if (ch == 'F')
o = 2;
else
o = 3;
update(1, 0, n-1);
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgVCwgbSwgdCwgcSwgYSwgYiwgbiwgbywgY250LCByZXM7CnN0cmluZyBzdHIsIHM7CmNoYXIgY2g7CmludCBzZWd0cmVlWzIxMDAwMDBdLCBvcGVyYXRpb25bMjEwMDAwMF07CnN0cmluZyBvcCA9ICJORUZJIjsKCnZvaWQgbGF6eV9wcm9wYWdhdGlvbiAoaW50IHYsIGludCBsLCBpbnQgcikKewoJaWYgKG9wZXJhdGlvblt2XSkKCXsKCQlpZiAob3BlcmF0aW9uW3ZdID09IDEpCgkJCXNlZ3RyZWVbdl0gPSAwLCBvcGVyYXRpb25bMip2XSA9IG9wZXJhdGlvblsyKnYrMV0gPSAxOwoJCWVsc2UgaWYgKG9wZXJhdGlvblt2XSA9PSAyKQoJCQlzZWd0cmVlW3ZdID0gci1sKzEsIG9wZXJhdGlvblsyKnZdID0gb3BlcmF0aW9uWzIqdisxXSA9IDI7CgkJZWxzZQoJCXsKCQkJc2VndHJlZVt2XSA9IChyLWwrMSkgLSBzZWd0cmVlW3ZdOwoJCQlvcGVyYXRpb25bMip2XSA9IDMtb3BlcmF0aW9uWzIqdl0sIG9wZXJhdGlvblsyKnYrMV0gPSAzLW9wZXJhdGlvblsyKnYrMV07CgkJfQoJCW9wZXJhdGlvblt2XSA9IDA7Cgl9Cn0KCnZvaWQgY3JlYXRlIChpbnQgdiwgaW50IGwsIGludCByKQp7CglpZiAobCA9PSByKQoJCXNlZ3RyZWVbdl0gPSBzdHJbbF0gLSAnMCc7CgllbHNlCgl7CgkJY3JlYXRlKDIqdiwgbCwgKGwrcikvMik7CgkJY3JlYXRlKDIqdisxLCAobCtyKS8yKzEsIHIpOwoJCXNlZ3RyZWVbdl0gPSBzZWd0cmVlWzIqdl0gKyBzZWd0cmVlWzIqdisxXTsKCX0KfQoKdm9pZCB1cGRhdGUgKGludCB2LCBpbnQgbCwgaW50IHIpCnsKCWxhenlfcHJvcGFnYXRpb24odiwgbCwgcik7CglpZiAobCA+IGIgfHwgciA8IGEpCQlyZXR1cm47CglpZiAoYSA8PSBsICYmIHIgPD0gYikKCXsKCQlvcGVyYXRpb25bdl0gPSBvOwoJCWxhenlfcHJvcGFnYXRpb24odiwgbCwgcik7CgkJcmV0dXJuOwoJfQoJdXBkYXRlKDIqdiwgbCwgKGwrcikvMik7Cgl1cGRhdGUoMip2KzEsIChsK3IpLzIrMSwgcik7CglzZWd0cmVlW3ZdID0gc2VndHJlZVsyKnZdICsgc2VndHJlZVsyKnYrMV07Cn0KCmludCBxdWVyeSAoaW50IHYsIGludCBsLCBpbnQgcikKewoJbGF6eV9wcm9wYWdhdGlvbih2LCBsLCByKTsKCWlmIChsID4gYiB8fCByIDwgYSkJCXJldHVybiAwOwoJaWYgKGEgPD0gbCAmJiByIDw9IGIpCXJldHVybiBzZWd0cmVlW3ZdOwoJcmV0dXJuIHF1ZXJ5KDIqdiwgbCwgKGwrcikvMikgKyBxdWVyeSgyKnYrMSwgKGwrcikvMisxLCByKTsKfQoKaW50IG1haW4gKCkKewoJc2NhbmYoIiVkIiwgJlQpOwoJZm9yIChpbnQgSSA9IDE7IEkgPD0gVCAmJiBzY2FuZigiJWQiLCAmbSkgPT0gMTsgKytJKQoJewoJCXByaW50ZigiQ2FzZSAlZDpcbiIsIEkpOwoJCXN0ciA9ICIiOwoJCWZvciAoaW50IEogPSAwOyBKIDwgbTsgKytKKQoJCXsKCQkJc2NhbmYoIiVkIiwgJnQpOwoJCQljaW4gPj4gczsKCQkJd2hpbGUgKHQtLSkJc3RyICs9IHM7CgkJfQoJCW4gPSBzdHIubGVuZ3RoKCk7CgkJY3JlYXRlKDEsIDAsIG4tMSk7CgkJbWVtc2V0KG9wZXJhdGlvbiwgMCwgc2l6ZW9mIG9wZXJhdGlvbik7CgkJc2NhbmYoIiVkIiwgJnEpOwoJCWNudCA9IDA7CgkJZm9yIChpbnQgSiA9IDE7IEogPD0gcTsgKytKKQoJCXsKCQkJY2luID4+IGNoID4+IGEgPj4gYjsKCQkJaWYgKGNoID09ICdTJykKCQkJewoJCQkJcmVzID0gcXVlcnkoMSwgMCwgbi0xKTsKCQkJCXByaW50ZigiUSVkOiAlZFxuIiwgKytjbnQsIHJlcyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAoY2ggPT0gJ0UnKQoJCQkJCW8gPSAxOwoJCQkJZWxzZSBpZiAoY2ggPT0gJ0YnKQoJCQkJCW8gPSAyOwoJCQkJZWxzZQoJCQkJCW8gPSAzOwoJCQkJdXBkYXRlKDEsIDAsIG4tMSk7CgkJCX0KCQl9Cgl9CglyZXR1cm4gMDsKfQ==