#include<stdio.h>
#include<string.h>
#define LL p<<1
#define RR p<<1|1
#define ls LL,l,mid
#define rs RR,mid+1,r
#define N 20007
int T;
int n;
int tree[N<<1];
int max(int x,int y)
{
if(x>y) return x;
return y;
}
void update(int p,int l,int r,int x,int k)
{
if(l==r)
{
tree[p]=k;
return;
}
int mid=(l+r)>>1;
if(mid>=x) update(ls,x,k);
if(mid<x) update(rs,x,k);
tree[x]=max(tree[RR],tree[LL]);
}
int query(int p,int l,int r,int L,int R)
{
if(l==r) return tree[p];
int mid=(l+r)>>1,ans=-1e9;
if(mid>=L) ans=max(ans,query(ls,L,R));
if(mid<R) ans=max(ans,query(rs,L,R));
return ans;
}
int x[N],y[N],z[N];
struct EDGE
{
int frm,to,head;
}edge[N<<1];
int tot;
void add(int x,int y)
{
edge[++tot].to=y;
edge[tot].frm=edge[x].head;
edge[x].head=tot;
return;
}
int siz[N],son[N],dep[N],fa[N],top[N],dfn[N],cnt;
void dfs1(int x)
{
son[x]=-1;
siz[x]=1;
for(int i=edge[x].head;i;i=edge[i].frm)
{
int v=edge[i].to;
if(dep[v]) continue;
dep[v]=dep[x]+1;
fa[v]=x;
dfs1(v);
siz[x]+=siz[v];
if(son[x]==-1||siz[v]>siz[son[x]])
son[x]=v;
}
}
void dfs2(int x,int t)
{
cnt++;
top[x]=t;
dfn[x]=cnt;
if(son[x]==-1) return;
dfs2(son[x],t);
for(int i=edge[x].head;i;i=edge[i].frm)
{
int v=edge[i].to;
if(v==fa[x]||v==son[x]) continue;
dfs2(v,v);
}
}
int MAX(int x,int y)
{
int ans=-1e9;
if(top[x]!=top[y])
{
if(dep[top[x]]>dep[top[y]])
{
int t=x;x=y;y=t;
}
ans=max(ans,query(1,1,n,dfn[top[x]],dfn[x]));
x=fa[top[x]];
}
if(dep[x]>dep[y])
{int t=x;x=y;y=t;}
ans=max(ans,query(1,1,n,dfn[son[x]],dfn[y]));
return ans;
}
main()
{
scanf("%d",&T);
while(T--)
{
cnt=tot=0;
memset(edge,0,sizeof(edge));
memset(tree,0,sizeof(tree));
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d %d %d",&x[i],&y[i],&z[i]);
add(x[i],y[i]);
add(y[i],x[i]);
}
dep[1]=1;
dfs1(1);
dfs2(1,1);
for(int i=1;i<n;i++)
{
if(dep[x[i]]>dep[y[i]])
{
int t=x[i];
x[i]=y[i];
y[i]=t;
}
update(1,1,n,dfn[y[i]],z[i]);
}
char s[10];
int a,b;
while(1)
{
scanf("%s",s);
if(s[0]=='D') break;
if(s[0]=='C')
{
scanf("%d%d",&a,&b);
update(1,1,n,dfn[y[a]],b);
}
else
{
scanf("%d%d",&a,&b);
if(a==b)
puts("0");
else
printf("%d\n",MAX(a,b));
}
}
}
return 0;
}
```