#include <cstdio>
#include <cstring>
#include <iostream>

#define CS			const static

//Reps
#define Rep(x,l,r)		for(int x = (l) ; x <= (r) ; x++)
#define Rush(X)			int ____X , X ; scanf("%d",&____X) ; for(X = 1 ; X <= ____X ; X++)
#define RepNxt(x,k)		for(int k = head[x] ; k ; k = nxt[k])
#define RepDec(x,l,r)		for(int x = (l) ; x >= (r) ; x--)

//SegTree
#define LS(x)			((x)<<1)
#define RS(x)			(((x)<<1) + 1)

using namespace std ;

CS int MaxN = 10010 , MaxE = MaxN << 1 ;

int opp[MaxE] , nxt[MaxE] ;

int val[MaxN] , head[MaxN] , dep[MaxN] , que[MaxN] , size[MaxN] , cost[MaxN] ,
	top[MaxN] , son[MaxN] , fa[MaxN] , chain[MaxN] ;

int n , tot ;

void Ins(int x,int y)
{
	opp[++tot] = y ; nxt[tot] = head[x] ; head[x] = tot ;
	opp[++tot] = x ; nxt[tot] = head[y] ; head[y] = tot ;
}

void HeavyLight()
{
	que[1] = que[0] = 1 ; dep[1] =0 ; fa[1] = 1 ; cost[1] = 0 ;
	Rep(i,1,que[0])
	{
		int x = que[i] ;
		RepNxt(x,k)	if(opp[k] != fa[x])
		{int y = opp[k] ; que[++que[0]] = y ; dep[y] = dep[x] + 1 , fa[y] = x , cost[y] = cost[x] + val[((k+1)>>1)+1] ;}
	}

	memset(son,0,sizeof(son)) ; memset(size,0,sizeof(size)) ; size[1] = 1 ;
	RepDec(i,que[0],2)
	{
		int x = que[i] , y = fa[x] ; size[x]++ ; size[y] += size[x] ;
		if(size[x]>size[son[y]])	son[y] = x ;
	}


	int cnt = 0 ;
	Rep(i,1,n)	if(son[fa[i]] != i)
	{
		chain[i] = ++cnt ; top[i] = i ;
		for(int k = son[i] ; k ; k = son[k])	top[k] = k , chain[k] = cnt ;
	}
}

int Lca(int x ,int y)
{
	while(chain[x] != chain[y])
	{
		if(dep[top[x]]<dep[top[y]])	swap(x,y) ;
		x = fa[top[x]] ;
	}
	return (dep[x]<dep[y])?(x):(y) ;
}

void QueryDist(int x,int y)	{printf("%d\n",cost[x]+cost[y]-(cost[Lca(x,y)]<<1));}

void Kth(int x,int y)
{
	int k ; scanf("%d",&k) ;
	
}

void Solve()
{
	scanf("%d",&n);

	tot = 0 ; memset(head,0,sizeof(head)) ;
	Rep(i,2,n)
		{int x , y ; scanf("%d %d %d\n",&x,&y,&val[i]) ; Ins(x,y) ;}

	HeavyLight();

	char com[10] ; int x , y , k ;
	for(scanf("%s",com) ; com[1] != 'O' ; scanf("\n%s",&com))
	{
		scanf("%d %d",&x,&y) ;
		if(com[1]=='I')	QueryDist(x,y) ;
		else		Kth(x,y) ;
	}
}

int main()
{
	Rush(T) Solve() ;

	return 0 ;
}
