#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=250010;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
return x*f;
}
int n,m,idx,tot,head[N],c[N],in[N],out[N],u[N],v[N];
struct node{
int next,to;
}e[N*2];
inline void ins(int from,int to){
e[++tot].next=head[from];
e[tot].to=to; head[from]=tot;
}
inline void update(int x,int val){
for(;x<=n;x+=x&(-x)) c[x]+=val;
}
inline int query(int x){
int res=0;for(;x;x-=x&(-x)) res+=c[x];
return res;
}
void dfs(int x,int fa){
in[x]=++idx;
for(int i=head[x];i;i=e[i].next)
if(e[i].to!=fa) dfs(e[i].to,x);
out[x]=idx;
}
int main(){
n=read();
for(int i=1;i<n;++i){
u[i]=read();v[i]=read();
ins(u[i],v[i]); ins(v[i],u[i]);
}
dfs(1,-1);
for(int i=1;i<n;++i){
if(in[u[i]]<in[v[i]]) swap(u[i],v[i]);
update(in[u[i]],1); update(out[u[i]]+1,-1);
}
m=read(); char ch[3];
for(int i=1;i<=n+m-1;++i){
scanf("%s",ch);
if(ch[0]==‘A‘){
int x=read(),y=read();
if(in[x]<in[y]) swap(x,y);
update(in[x],-1); update(out[x]+1,+1);
}else {
int x=read();
printf("%d\n",query(in[x]));
}
}
return 0;
}