rt
#include<bits/stdc++.h>
#define N 10005
using namespace std;
int g;
int n;
int head[N],tot=1;
struct edge{
int to,next,w;
}e[N*2];
void add(int u,int v,int w)
{
e[tot]=(edge){v,head[u],w};
head[u]=tot++;
}
void init()
{
tot=1;
memset(head,0,sizeof head);
}
int dep[N],f[N][15],w[N];
void dfs(int now,int fa)
{
f[now][0]=fa;
dep[now]=dep[fa]+1;
for(int i=1;f[now][i-1];i++)
f[now][i]=f[f[now][i-1]][i-1];
for(int i=head[now];i;i=e[i].next)
{
int v=e[i].to;
if(v==fa) continue;
w[v]=w[now]+e[i].w;
dfs(v,now);
}
}
int glca(int u,int v)
{
if(dep[u]<dep[v]) swap(u,v);
for(int i=13;i>=0;i--)
if(dep[f[u][i]]>=dep[v]) u=f[u][i];
if(u==v) return u;
for(int i=13;i>=0;i--)
if(f[u][i]^f[v][i]) u=f[u][i],v=f[v][i];
return f[u][0];
}
int kfa(int u,int k)
{
for(int i=13;i>=0;i--)
if(k>=(1<<i)) u=f[u][i],k-=(1<<i);
return u;
}
int main()
{
scanf("%d",&g);
while(g--)
{
init();
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
dfs(1,0);
while(1)
{
char opr[2];
int u,v,k,lca;
scanf("%s",opr);
if(opr[1]=='O') break;
scanf("%d%d",&u,&v);
lca=glca(u,v);
if(opr[1]=='I')
printf("%d\n",w[u]+w[v]-2*w[lca]);
if(opr[1]=='T')
{
scanf("%d",&k);
if(dep[u]-dep[lca]+1>=k)printf("%d\n",kfa(u,k));
else printf("%d\n",kfa(v,dep[u]+dep[v]-2*dep[lca]+1-k));
}
}
}
return 0;
}