#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define pi pair<int,int>
#define fi first
#define se second
const int N = 10005;
// tree rooted at 1
int t,n, cur, par[N], size[N], edge[N], ind[N], ied[N], chainhead[N], tour[N], tree[4*N];
/* par stores immediate parent
size stores the size of subtree
edge stores the weight of ith edge
ind stores the index of node in euler tour
ied stores the index of edge in euler tour
chainhead stores the head of chain of which the node is a part of
tour stores the weight of edge visited acc to heavy-light decomposition
tree stores the segment tree for tour
*/
vector<pi> adj[N]; //adjacency list for tree
string s;
void dfs1(int u, int p){ //finds par of node and size of subtree
par[u] = p;
size[u] = 1;
for(pi i: adj[u]){
if(i.fi == p) continue;
dfs1(i.fi, u);
size[u] += size[i.fi];
}
}
void dfs2(int u){ //finds the chainhead of nodes according to hld
int mx = 0, nd = 0, ed;
if(chainhead[u] == 0) chainhead[u] = u;
for(pi i: adj[u]){
if(i.fi == par[u]) continue;
if(size[i.fi] > mx){
mx = size[i.fi];
nd = i.fi;
ed = i.se;
}
}
if(nd != 0){
chainhead[nd] = chainhead[u];
tour[++cur] = ed;
ind[nd] = cur; ied[ed] = cur;
dfs2(nd);
}
for(pi i: adj[u]){
if(i.fi == par[u] || i.fi == nd)
continue;
tour[++cur] = i.se;
ind[i.fi] = cur;
ied[i.se] = cur;
dfs2(i.fi);
}
}
int lca(int u, int v){
while(chainhead[u] != chainhead[v]){
if(ind[u] > ind[v])
u = par[chainhead[u]];
else
v = par[chainhead[v]];
if(u == 0) u = 1;
if(v == 0) v = 1;
}
return ((ind[u] >= ind[v])?v:u);
}
void build(int nd, int s, int e){
if(s == e){
tree[nd] = edge[tour[s]];
return;
}
int m = (s + e)>>1;
build(2*nd, s, m);
build(2*nd+1, m+1, e);
tree[nd] = max(tree[2*nd],tree[2*nd+1]);
}
void upd(int nd, int s, int e, int i, int v){
if(s == e){
tree[nd] = v;
return;
}
int m = (s + e)>>1;
if(i <= m)
upd(2*nd, s, m, i, v);
else
upd(2*nd+1, m+1, e, i, v);
tree[nd] = max(tree[2*nd],tree[2*nd+1]);
}
int query(int nd, int s, int e, int l, int r){
if(s > r || e < l || l > r || s > e)
return 0;
if(s >= l && e <= r)
return tree[nd];
int m = (s + e)>>1;
return max(query(2*nd, s, m, l, r),query(2*nd+1, m+1, e, l, r));
}
void clear(){
cur = 0;
memset(chainhead, 0, sizeof chainhead);
for(int i = 1; i < N; i++)
adj[i].clear();
}
signed main(){
//freopen("input.txt", "r", stdin);
scanf("%d",&t);
while(t--){
clear();
scanf("%d",&n);
for(int i = 1; i <= n-1; i++){
int u, v, w;
scanf("%d %d %d",&u,&v,&w);
adj[u].pb({v,i});
adj[v].pb({u,i});
edge[i] = w;
}
dfs1(1,0);
ind[1] = 0;
dfs2(1);
build(1,1,cur);
while(true){
cin>>s;
if(s == "DONE")
break;
else if(s == "CHANGE"){
int i,ti;
scanf("%d %d",&i,&ti);
edge[i] = ti;
upd(1,1,cur,ied[i],ti);
}
else{
int a,b;
scanf("%d %d",&a,&b);
int u = lca(a,b), ans = 0;
while(chainhead[a] != chainhead[u]){
ans = max(ans,query(1,1,cur,ind[chainhead[a]],ind[a]));
a = par[chainhead[a]];
}
ans = max(ans,query(1,1,cur,ind[u]+1,ind[a]));
a = b;
while(chainhead[a] != chainhead[u]){
ans = max(ans,query(1,1,cur,ind[chainhead[a]],ind[a]));
a = par[chainhead[a]];
}
ans = max(ans,query(1,1,cur,ind[u]+1,ind[a]));
printf("%d\n",ans);
}
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcGkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCgpjb25zdCBpbnQgTiA9IDEwMDA1OwoKLy8gdHJlZSByb290ZWQgYXQgMQppbnQgdCxuLCBjdXIsIHBhcltOXSwgc2l6ZVtOXSwgZWRnZVtOXSwgaW5kW05dLCBpZWRbTl0sIGNoYWluaGVhZFtOXSwgdG91cltOXSwgdHJlZVs0Kk5dOwovKiAgcGFyIHN0b3JlcyBpbW1lZGlhdGUgcGFyZW50CiAgICBzaXplIHN0b3JlcyB0aGUgc2l6ZSBvZiBzdWJ0cmVlCiAgICBlZGdlIHN0b3JlcyB0aGUgd2VpZ2h0IG9mIGl0aCBlZGdlCiAgICBpbmQgc3RvcmVzIHRoZSBpbmRleCBvZiBub2RlIGluIGV1bGVyIHRvdXIKICAgIGllZCBzdG9yZXMgdGhlIGluZGV4IG9mIGVkZ2UgaW4gZXVsZXIgdG91cgogICAgY2hhaW5oZWFkIHN0b3JlcyB0aGUgaGVhZCBvZiBjaGFpbiBvZiB3aGljaCB0aGUgbm9kZSBpcyBhIHBhcnQgb2YKICAgIHRvdXIgc3RvcmVzIHRoZSB3ZWlnaHQgb2YgZWRnZSB2aXNpdGVkIGFjYyB0byBoZWF2eS1saWdodCBkZWNvbXBvc2l0aW9uCiAgICB0cmVlIHN0b3JlcyB0aGUgc2VnbWVudCB0cmVlIGZvciB0b3VyCiovCnZlY3RvcjxwaT4gYWRqW05dOyAgLy9hZGphY2VuY3kgbGlzdCBmb3IgdHJlZQpzdHJpbmcgczsKCnZvaWQgZGZzMShpbnQgdSwgaW50IHApeyAgICAvL2ZpbmRzIHBhciBvZiBub2RlIGFuZCBzaXplIG9mIHN1YnRyZWUKICAgIHBhclt1XSA9IHA7CiAgICBzaXplW3VdID0gMTsKICAgIGZvcihwaSBpOiBhZGpbdV0pewogICAgICAgIGlmKGkuZmkgPT0gcCkgICBjb250aW51ZTsKICAgICAgICBkZnMxKGkuZmksIHUpOwogICAgICAgIHNpemVbdV0gKz0gc2l6ZVtpLmZpXTsKICAgIH0KfQoKdm9pZCBkZnMyKGludCB1KXsgICAvL2ZpbmRzIHRoZSBjaGFpbmhlYWQgb2Ygbm9kZXMgYWNjb3JkaW5nIHRvIGhsZAogICAgaW50IG14ID0gMCwgbmQgPSAwLCBlZDsKICAgIGlmKGNoYWluaGVhZFt1XSA9PSAwKSAgIGNoYWluaGVhZFt1XSA9IHU7CiAgICBmb3IocGkgaTogYWRqW3VdKXsKICAgICAgICBpZihpLmZpID09IHBhclt1XSkgIGNvbnRpbnVlOwogICAgICAgIGlmKHNpemVbaS5maV0gPiBteCl7CiAgICAgICAgICAgIG14ID0gc2l6ZVtpLmZpXTsKICAgICAgICAgICAgbmQgPSBpLmZpOwogICAgICAgICAgICBlZCA9IGkuc2U7CiAgICAgICAgfQogICAgfQogICAgaWYobmQgIT0gMCl7CiAgICAgICAgY2hhaW5oZWFkW25kXSA9IGNoYWluaGVhZFt1XTsKICAgICAgICB0b3VyWysrY3VyXSA9IGVkOwogICAgICAgIGluZFtuZF0gPSBjdXI7ICBpZWRbZWRdID0gY3VyOwogICAgICAgIGRmczIobmQpOwogICAgfQogICAgZm9yKHBpIGk6IGFkalt1XSl7CiAgICAgICAgaWYoaS5maSA9PSBwYXJbdV0gfHwgaS5maSA9PSBuZCkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgdG91clsrK2N1cl0gPSBpLnNlOwogICAgICAgIGluZFtpLmZpXSA9IGN1cjsKICAgICAgICBpZWRbaS5zZV0gPSBjdXI7CiAgICAgICAgZGZzMihpLmZpKTsKICAgIH0KfQoKaW50IGxjYShpbnQgdSwgaW50IHYpeyAKICAgIHdoaWxlKGNoYWluaGVhZFt1XSAhPSBjaGFpbmhlYWRbdl0pewogICAgICAgIGlmKGluZFt1XSA+IGluZFt2XSkKICAgICAgICAgICAgdSA9IHBhcltjaGFpbmhlYWRbdV1dOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdiA9IHBhcltjaGFpbmhlYWRbdl1dOwogICAgICAgIGlmKHUgPT0gMCkgIHUgPSAxOwogICAgICAgIGlmKHYgPT0gMCkgIHYgPSAxOwogICAgfQogICAgcmV0dXJuICgoaW5kW3VdID49IGluZFt2XSk/djp1KTsKfQoKdm9pZCBidWlsZChpbnQgbmQsIGludCBzLCBpbnQgZSl7CiAgICBpZihzID09IGUpewogICAgICAgIHRyZWVbbmRdID0gZWRnZVt0b3VyW3NdXTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChzICsgZSk+PjE7CiAgICBidWlsZCgyKm5kLCBzLCBtKTsKICAgIGJ1aWxkKDIqbmQrMSwgbSsxLCBlKTsKICAgIHRyZWVbbmRdID0gbWF4KHRyZWVbMipuZF0sdHJlZVsyKm5kKzFdKTsKfQoKdm9pZCB1cGQoaW50IG5kLCBpbnQgcywgaW50IGUsIGludCBpLCBpbnQgdil7CiAgICBpZihzID09IGUpewogICAgICAgIHRyZWVbbmRdID0gdjsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChzICsgZSk+PjE7CiAgICBpZihpIDw9IG0pCiAgICAgICAgdXBkKDIqbmQsIHMsIG0sIGksIHYpOwogICAgZWxzZQogICAgICAgIHVwZCgyKm5kKzEsIG0rMSwgZSwgaSwgdik7CiAgICB0cmVlW25kXSA9IG1heCh0cmVlWzIqbmRdLHRyZWVbMipuZCsxXSk7Cn0KCmludCBxdWVyeShpbnQgbmQsIGludCBzLCBpbnQgZSwgaW50IGwsIGludCByKXsKICAgIGlmKHMgPiByIHx8IGUgPCBsIHx8IGwgPiByIHx8IHMgPiBlKQogICAgICAgIHJldHVybiAwOwogICAgaWYocyA+PSBsICYmIGUgPD0gcikKICAgICAgICByZXR1cm4gdHJlZVtuZF07CiAgICBpbnQgbSA9IChzICsgZSk+PjE7CiAgICByZXR1cm4gbWF4KHF1ZXJ5KDIqbmQsIHMsIG0sIGwsIHIpLHF1ZXJ5KDIqbmQrMSwgbSsxLCBlLCBsLCByKSk7Cn0KCnZvaWQgY2xlYXIoKXsKICAgIGN1ciA9IDA7CiAgICBtZW1zZXQoY2hhaW5oZWFkLCAwLCBzaXplb2YgY2hhaW5oZWFkKTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBOOyBpKyspCiAgICAgICAgYWRqW2ldLmNsZWFyKCk7Cn0KCnNpZ25lZCBtYWluKCl7CiAgICAvL2ZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgc2NhbmYoIiVkIiwmdCk7CiAgICB3aGlsZSh0LS0pewogICAgICAgIGNsZWFyKCk7CiAgICAgICAgc2NhbmYoIiVkIiwmbik7IAogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbi0xOyBpKyspewogICAgICAgICAgICBpbnQgdSwgdiwgdzsKICAgICAgICAgICAgc2NhbmYoIiVkICVkICVkIiwmdSwmdiwmdyk7CiAgICAgICAgICAgIGFkalt1XS5wYih7dixpfSk7CiAgICAgICAgICAgIGFkalt2XS5wYih7dSxpfSk7CiAgICAgICAgICAgIGVkZ2VbaV0gPSB3OwogICAgICAgIH0KICAgICAgICBkZnMxKDEsMCk7CiAgICAgICAgaW5kWzFdID0gMDsKICAgICAgICBkZnMyKDEpOwogICAgICAgIGJ1aWxkKDEsMSxjdXIpOwogICAgICAgIHdoaWxlKHRydWUpewogICAgICAgICAgICBjaW4+PnM7CiAgICAgICAgICAgIGlmKHMgPT0gIkRPTkUiKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGVsc2UgaWYocyA9PSAiQ0hBTkdFIil7CiAgICAgICAgICAgICAgICBpbnQgaSx0aTsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCAlZCIsJmksJnRpKTsKICAgICAgICAgICAgICAgIGVkZ2VbaV0gPSB0aTsKICAgICAgICAgICAgICAgIHVwZCgxLDEsY3VyLGllZFtpXSx0aSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGludCBhLGI7CiAgICAgICAgICAgICAgICBzY2FuZigiJWQgJWQiLCZhLCZiKTsKICAgICAgICAgICAgICAgIGludCB1ID0gbGNhKGEsYiksIGFucyA9IDA7CiAgICAgICAgICAgICAgICB3aGlsZShjaGFpbmhlYWRbYV0gIT0gY2hhaW5oZWFkW3VdKXsKICAgICAgICAgICAgICAgICAgICBhbnMgPSBtYXgoYW5zLHF1ZXJ5KDEsMSxjdXIsaW5kW2NoYWluaGVhZFthXV0saW5kW2FdKSk7CiAgICAgICAgICAgICAgICAgICAgYSA9IHBhcltjaGFpbmhlYWRbYV1dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYW5zID0gbWF4KGFucyxxdWVyeSgxLDEsY3VyLGluZFt1XSsxLGluZFthXSkpOwogICAgICAgICAgICAgICAgYSA9IGI7CiAgICAgICAgICAgICAgICB3aGlsZShjaGFpbmhlYWRbYV0gIT0gY2hhaW5oZWFkW3VdKXsKICAgICAgICAgICAgICAgICAgICBhbnMgPSBtYXgoYW5zLHF1ZXJ5KDEsMSxjdXIsaW5kW2NoYWluaGVhZFthXV0saW5kW2FdKSk7CiAgICAgICAgICAgICAgICAgICAgYSA9IHBhcltjaGFpbmhlYWRbYV1dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYW5zID0gbWF4KGFucyxxdWVyeSgxLDEsY3VyLGluZFt1XSsxLGluZFthXSkpOwogICAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIixhbnMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0=