#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct node {
int fale;
int len;
}str[400009];
int s,e;
int dir;
#define xx
int main(){
#ifdef xx
freopen("1.txt","r",stdin);
#endif
int t;
scanf("%d",&t);
for(int a=1;a<=t;a++){
int n;
scanf("%d",&n);
printf("Case #%d:\n",a);
dir=1;
s=e=200001;
memset(str,0,sizeof str);
while(n--){
char g[15];
scanf("%s",g);
if(g[0]=='P'&&g[1]=='U'){
int ans;
scanf("%d",&ans);
if(dir==1){
if(s==e){
e++;
str[e].len++;
str[e].fale=ans;
}
else{
if(ans==str[e].fale){
str[e].len++;
}
else {
e++;
str[e].len++;
str[e].fale=ans;
}
}
}
else {
if(s==e){
str[s].len++;
str[s].fale=ans;
s--;
}
else {
if(ans==str[s+1].fale){
str[s+1].len++;
}
else {
str[s].len++;
str[s].fale=ans;
s--;
}
}
}
}
else if(g[0]=='R'){//dir
if(dir) dir=0;
else dir=1;
}else if(g[0]=='Q'){
if(e==s){
printf("Invalid.\n");
continue;
}
int res=0;
if(dir==0){
if(str[e].fale==0){
if(str[e].len>=2) res=1;
if(str[e].len==1&&e-s>=2) res=1;
}
else {
if(str[e-1].len>=2) res=((str[e].len+1)%2)?1:0;
else if(str[e-1].len==1&&str[e-2].len>=1) res=((str[e].len+1)%2)?1:0;
else { res=((str[e].len+0)%2)?1:0; }
}
}
else {
if(str[s+1].fale==0){
if(str[s+1].len>=2) res=1;
if(str[s+1].len==1&&e-s>=2) res=1;
}
else {
if(str[s+2].len>=2) res=((str[s+1].len+1)%2)?1:0;
else if(str[s+2].len==1&&str[s+3].len>=1) res=((str[s+1].len+1)%2)?1:0;
else res=((str[s+1].len+0)%2)?1:0;
}
}
printf ("%d\n",res);
}else {//pop
if(dir==1){
if(str[e].len==1)
e--;
else str[e].len--;
}
else {
if(str[s+1].len==1) s++;
else str[s+1].len--;
}
}
}
}
return 0;
}
#include<algorithm>
#include<cstring>
using namespace std;
struct node {
int fale;
int len;
}str[400009];
int s,e;
int dir;
#define xx
int main(){
#ifdef xx
freopen("1.txt","r",stdin);
#endif
int t;
scanf("%d",&t);
for(int a=1;a<=t;a++){
int n;
scanf("%d",&n);
printf("Case #%d:\n",a);
dir=1;
s=e=200001;
memset(str,0,sizeof str);
while(n--){
char g[15];
scanf("%s",g);
if(g[0]=='P'&&g[1]=='U'){
int ans;
scanf("%d",&ans);
if(dir==1){
if(s==e){
e++;
str[e].len++;
str[e].fale=ans;
}
else{
if(ans==str[e].fale){
str[e].len++;
}
else {
e++;
str[e].len++;
str[e].fale=ans;
}
}
}
else {
if(s==e){
str[s].len++;
str[s].fale=ans;
s--;
}
else {
if(ans==str[s+1].fale){
str[s+1].len++;
}
else {
str[s].len++;
str[s].fale=ans;
s--;
}
}
}
}
else if(g[0]=='R'){//dir
if(dir) dir=0;
else dir=1;
}else if(g[0]=='Q'){
if(e==s){
printf("Invalid.\n");
continue;
}
int res=0;
if(dir==0){
if(str[e].fale==0){
if(str[e].len>=2) res=1;
if(str[e].len==1&&e-s>=2) res=1;
}
else {
if(str[e-1].len>=2) res=((str[e].len+1)%2)?1:0;
else if(str[e-1].len==1&&str[e-2].len>=1) res=((str[e].len+1)%2)?1:0;
else { res=((str[e].len+0)%2)?1:0; }
}
}
else {
if(str[s+1].fale==0){
if(str[s+1].len>=2) res=1;
if(str[s+1].len==1&&e-s>=2) res=1;
}
else {
if(str[s+2].len>=2) res=((str[s+1].len+1)%2)?1:0;
else if(str[s+2].len==1&&str[s+3].len>=1) res=((str[s+1].len+1)%2)?1:0;
else res=((str[s+1].len+0)%2)?1:0;
}
}
printf ("%d\n",res);
}else {//pop
if(dir==1){
if(str[e].len==1)
e--;
else str[e].len--;
}
else {
if(str[s+1].len==1) s++;
else str[s+1].len--;
}
}
}
}
return 0;
}