1 #include<cstdio>
2 #include<cstring>
3 #include<string>
4 #include<algorithm>
5 #include<map>
6 using namespace std;
7 map<string,int>mp;
8 pair<int,int>egd[120005];
9 int y1,y2,time_,now;
10 int next[120005],head[120005],point[120005],val[120005];
11 int vis[120005],left_[120005],right_[120005],setv[120005],sumv[120005],sum[120005];
12 void addadge(int u,int v,int d)
13 {
14 next[++now]=head[u];
15 head[u]=now;
16 point[now]=v;
17 val[now]=d;
18 }
19 void dfs(int k,int v)
20 {
21 int i,u;
22 vis[k]=1; time_++;
23 sum[time_]=v; left_[k]=time_;
24 for (i=head[k];i!=-1;i=next[i])
25 {
26 u=point[i];
27 if (!vis[u]) dfs(u,v^val[i]);
28 }
29 right_[k]=time_;
30 }
31 void build(int o,int l,int r)
32 {
33 int lc=o*2,rc=o*2+1;
34 setv[o]=0;
35 if (l==r) {sumv[o]=sum[l]; return;}
36 int mid=l+(r-l)/2;
37 build(lc,l,mid); build(rc,mid+1,r);
38 sumv[o]=sumv[lc]+sumv[rc];
39 return;
40 }
41 void update(int o,int l,int r)
42 {
43 int lc=o*2,rc=o*2+1,mid=l+(r-l)/2;
44 if (y1<=l&&y2>=r) {
45 setv[o]^=1;
46 sumv[o]=r-l+1-sumv[o];
47 return;
48 }
49 if (setv[o]>=1)
50 {
51 setv[lc]^=1; setv[rc]^=1;
52 sumv[lc]=mid-l+1-sumv[lc];
53 sumv[rc]=r-mid-sumv[rc];
54 setv[o]=0;
55 }
56 if (y1<=mid) update(lc,l,mid);
57 if (y2>mid) update(rc,mid+1,r);
58 sumv[o]=sumv[lc]+sumv[rc];
59 }
60 int main()
61 {
62 int T,t,d,i,n,u,v,q;
63 char s1[15],s2[15],c;
64 scanf("%d",&T);
65 for (t=1;t<=T;t++)
66 {
67 mp.clear();
68 memset(head,-1,sizeof(head));
69 memset(vis,0,sizeof(vis));
70 now=0; time_=0;
71 scanf("%d",&n);
72 for (i=1;i<=n;i++)
73 {
74 scanf("%s",s1);
75 mp[(string)s1]=i;
76 }
77 for (i=1;i<n;i++)
78 {
79 scanf("%s%s%d",s1,s2,&d);
80 u=mp[(string)s1]; v=mp[(string)s2];
81 addadge(u,v,d);
82 addadge(v,u,d);
83 egd[i]=make_pair(u,v);
84 }
85 dfs(1,0);
86 scanf("%d",&q);
87 printf("Case #%d:\n",t);
88 build(1,1,n);
89 while (q--)
90 {
91 getchar();
92 scanf("%c",&c);
93 if (c=='Q') printf("%d\n",sumv[1]*(n-sumv[1])*2);
94 else
95 {
96 scanf("%d",&d);
97 u=egd[d].first; v=egd[d].second;
98 if (left_[u]>left_[v]) {d=u; u=v; v=d; }
99 y1=left_[v]; y2=right_[v];
100 update(1,1,n);
101 }
102 }
103 }
104 return 0;
105 }