#include<cstring>
#include<algorithm>
#include<iostream>
#define N 100005
using namespace std;
struct EDGE
{
int to,next;
}edge[N<<1];
int edgecnt;
int head[N];
void addedge(int from,int to)
{
edge[edgecnt]=(EDGE){to,head[from]};
head[from]=edgecnt++;
}
int eula[N<<1];
int eulacnt;
void init()
{
edgecnt=0;
memset(head,-1,sizeof(head));
eulacnt=0;
}
void dfs(int id,int fa)
{
eula[eulacnt++]=id;
for(int i=head[id];~i;i=edge[i].next)
{
if(edge[i].to==fa) continue;
dfs(edge[i].to,id);
}
eula[eulacnt++]=id;
}
int l[N],r[N];
int who[N<<1];
int n;
void getlr()
{
memset(l,0x7F,sizeof(l));
memset(r,0,sizeof(r));
for(int i=0;i<eulacnt;i++)
{
l[eula[i]]=min(l[eula[i]],i);
r[eula[i]]=max(r[eula[i]],i);
}
memset(who,0,sizeof(who));
for(int i=1;i<=n;i++) who[l[i]]=i;
}
struct node
{
int l,r,cnt0,cnt1;
bool XOR;
}tree[N<<3];
inline void ex(int id)
{
int t=tree[id].cnt0;
tree[id].cnt0=tree[id].cnt1;
tree[id].cnt1=t;
}
inline void pushdown(int id)
{
if(tree[id].XOR)
{
tree[id<<1].XOR^=1;
ex(id<<1);
tree[id<<1|1].XOR^=1;
ex(id<<1|1);
tree[id].XOR=0;
}
}
inline void pushup(int id)
{
tree[id].cnt0=tree[id<<1].cnt0+tree[id<<1|1].cnt0;
tree[id].cnt1=tree[id<<1].cnt1+tree[id<<1|1].cnt1;
}
void build(int id,int l,int r)
{
tree[id].l=l;
tree[id].r=r;
tree[id].XOR=0;
tree[id].cnt1=0;
if(l==r) tree[id].cnt0=who[l]?1:0;
else
{
int mid=(l+r)>>1;
build(id<<1,l,mid);
build(id<<1|1,mid+1,r);
pushup(id);
}
}
void op(int id,int l,int r)
{
if(l<=tree[id].l&&tree[id].r<=r)
{
tree[id].XOR^=1;
ex(id);
}
else
{
int mid=(tree[id].l+tree[id].r)>>1;
pushdown(id);
if(l<=mid) op(id<<1,l,r);
if(mid<r) op(id<<1|1,l,r);
pushup(id);
}
}
int que(int id,int l,int r)
{
if(l<=tree[id].l&&tree[id].r<=r) return tree[id].cnt1;
else
{
pushdown(id);
int mid=(tree[id].l+tree[id].r)>>1;
int res=0;
if(l<=mid) res+=que(id<<1,l,r);
if(mid<r) res+=que(id<<1|1,l,r);
return res;
}
}
inline int getint()
{
int c;
while(c=getchar(),c<'0'||'9'<c);
int res=c-48;
while(c=getchar(),'0'<=c&&c<='9') res=(res<<3)+res+res+c-48;
return res;
}
int main()
{
n=getint();
init();
int i;
for(i=1;i<n;i++)
{
int s,t;
s=getint();
t=getint();
addedge(s,t);
addedge(t,s);
}
dfs(1,0);
getlr();
build(1,0,eulacnt-1);
int m;
m=getint();
while(m--)
{
char s[10];
int p;
scanf("%s",s);
p=getint();
if(s[0]=='Q')
{
printf("%d\n",que(1,l[p],r[p]));
}
else op(1,l[p],r[p]);
}
return 0;
}