1 #include<bits/stdc++.h>
2 #define mk make_pair
3 #define fir first
4 #define sec second
5 using namespace std;
6 const int N=100010;
7 int n,m,st[N],idx,o=1,hd[N],col[N],ans[N],fa[N][20],dep[N],bin[20],cnt[N];
8 char ch[10];
9 typedef pair<int,int>pii;
10 set<pii>s[N];
11 set<pii>::iterator it1,it2,it;
12 struct Edge{int v,nt;}E[N<<1];
13 void adde(int u,int v){
14 E[o]=(Edge){v,hd[u]};hd[u]=o++;
15 E[o]=(Edge){u,hd[v]};hd[v]=o++;
16 }
17 int lca(int u,int v){
18 if(dep[u]<dep[v])swap(u,v);
19 for(int i=0;i<=18;++i)if((dep[u]-dep[v])&bin[i])u=fa[u][i];
20 if(u==v)return u;
21 for(int i=18;~i;--i)if(fa[u][i]!=fa[v][i])u=fa[u][i],v=fa[v][i];
22 return fa[u][0];
23 }
24 int dis(int u,int v){
25 return dep[u]+dep[v]-2*dep[lca(u,v)];
26 }
27 void ins(int x,int u){
28 s[x].insert(mk(st[u],u));
29 it1 = it2 = s[x].lower_bound(mk(st[u],u));
30 if(it1==s[x].begin())it1=s[x].end();
31 --it1;it2++;
32 if(it2==s[x].end())it2=s[x].begin();
33 int u1 = (*it1).sec , u2 = (*it2).sec;
34 ans[x] -= dis(u1,u2) ;
35 ans[x] += dis(u1,u) + dis(u2,u);
36 }
37 void del(int x,int u){
38 it = it1 = it2 = s[x].lower_bound(mk(st[u],u));
39 if(it1==s[x].begin())it1=s[x].end();
40 --it1;it2++;
41 if(it2==s[x].end())it2=s[x].begin();
42 int u1 = (*it1).sec , u2 = (*it2).sec;
43 ans[x] -= dis(u1,u) + dis(u2,u);
44 ans[x] += dis(u1,u2) ;
45 s[x].erase(it);
46 }
47 void dfs(int u,int F){
48 st[u]=++idx;
49 for(int i=1;bin[i]<=dep[u];++i)fa[u][i]=fa[fa[u][i-1]][i-1];
50 ins(col[u],u);
51 for(int i=hd[u];i;i=E[i].nt){
52 int v=E[i].v;
53 if(v==F)continue;
54 dep[v]=dep[u]+1;
55 fa[v][0]=u;
56 dfs(v,u);
57 }
58 }
59 int main(){
60 freopen("tree.in","r",stdin);
61 freopen("tree.out","w",stdout);
62 for(int i=bin[0]=1;i<=18;++i)bin[i]=bin[i-1]<<1;
63 scanf("%d",&n);
64 for(int i=1,u,v;i<n;++i){
65 scanf("%d%d",&u,&v);
66 adde(u,v);
67 }
68 for(int i=1;i<=n;++i)scanf("%d",&col[i]),cnt[col[i]]++;
69 dfs(1,0);
70 scanf("%d",&m);
71 for(int i=1,u,x,y;i<=m;++i){
72 scanf("%s",ch);
73 if(ch[0]=='U'){
74 scanf("%d%d",&u,&x);
75 cnt[x]++;
76 cnt[col[u]]--;
77 del(col[u],u);
78 ins(col[u]=x,u);
79 }else {
80 scanf("%d",&x);
81 if(!cnt[x])puts("-1");
82 else printf("%d
",ans[x]>>1);
83 }
84 }
85 return 0;
86 }