1 #include <cstdio>
2 #include <iostream>
3 using namespace std;
4 #define ref(i,x,y)for(int i=x;i<=y;++i)
5 #define eef(i,x)for(int i=head[x],y=e[i].to;i;i=e[i].next,y=e[i].to)if(y!=f)
6 int Read()
7 {
8 char c=getchar();
9 for(;c<‘A‘||c>‘Z‘;c=getchar());
10 return c;
11 }
12 int read()
13 {
14 char c=getchar();int d=0,f=1;
15 for(;c<‘0‘||c>‘9‘;c=getchar())if(c==‘-‘)f=-1;
16 for(;c>=‘0‘&&c<=‘9‘;d=d*10+c-48,c=getchar());
17 return d*f;
18 }
19 const int N=100001;
20 int n,m,cnt,tot;
21 int head[N],s[N*3],pos[N];
22 struct xint{int to,next;}e[N*2];
23 struct node{int x,y,s1,s2,l1,l2,r1,r2,ans;}a[N*3*10];
24 void add(int x,int y)
25 {
26 e[++cnt]=(xint){y,head[x]};head[x]=cnt;
27 e[++cnt]=(xint){x,head[y]};head[y]=cnt;
28 }
29 void pushup(int t)
30 {
31 node l=a[t<<1],r=a[t<<1|1];
32 a[t].s1=r.s1+max(l.s1-r.s2,0);
33 a[t].s2=l.s2+max(r.s2-l.s1,0);
34 a[t].l1=max(l.l1,max(l.s1+l.s2+r.l2,l.s2+r.l1-l.s1));
35 a[t].r1=max(r.r1,max(r.s1+r.s2+l.r2,r.s1+l.r1-r.s2));
36 a[t].l2=max(l.l2,r.l2+l.s1-l.s2);
37 a[t].r2=max(r.r2,l.r2+r.s2-r.s1);
38 a[t].ans=max(max(l.ans,r.ans),max(l.r1+r.l2,r.l1+l.r2));
39 }
40 void dfs(int f,int x)
41 {
42 s[++tot]=-2;
43 s[pos[x]=++tot]=x;
44 eef(i,x)dfs(x,y);
45 s[++tot]=-1;
46 }
47 void build(int x,int y,int t)
48 {
49 a[t].x=x;a[t].y=y;
50 if(x==y)
51 {
52 if(s[x]>0)a[t].l1=a[t].l2=a[t].r1=a[t].r2=a[t].ans=0;
53 else a[t].l1=a[t].l2=a[t].r1=a[t].r2=-1e7,a[t].ans=-1;
54 if(s[x]==-2)a[t].s1=1;else
55 if(s[x]==-1)a[t].s2=1;
56 return;
57 }
58 int m=(x+y)>>1;
59 build(x,m,t<<1);
60 build(m+1,y,t<<1|1);
61 pushup(t);
62 }
63 void modify(int x,int t)
64 {
65 if(a[t].x==a[t].y)
66 {
67 if(a[t].l1>-1e7)
68 {
69 a[t].l1=a[t].r1=a[t].l2=a[t].r2=-1e7;
70 a[t].ans=-1;
71 }else
72 {
73 a[t].l1=a[t].r1=a[t].l2=a[t].r2=0;
74 a[t].ans=0;
75 }
76 return;
77 }
78 int m=(a[t].x+a[t].y)>>1;
79 if(x<=m)modify(x,t<<1);
80 if(x>m)modify(x,t<<1|1);
81 pushup(t);
82 }
83 int main()
84 {
85 n=read();
86 ref(i,2,n)
87 {
88 int x=read(),y=read();
89 add(x,y);
90 }
91 dfs(0,1);
92 build(1,tot,1);
93 m=read();
94 while(m--)
95 {
96 char c=Read();
97 if(c==‘C‘)modify(pos[read()],1);
98 else printf("%d\n",a[1].ans);
99 }
100 }