#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;
}