/*
Author:-Sarthak Taneja
CSE 2nd year,MNNIT Allahabad
*/
#include <bits/stdc++.h>
using namespace std;
#define root 0
#define N 10005
#define LN 14
vector<int> adj[N], costs[N], indexx[N];
int baseArray[N], ptr;
int chainNo, chainInd[N], chainHead[N], posInBase[N];
int level[N], P[N][LN], otherEnd[N], subsize[N];
int st[N*6], qt[N*6];
void make_tree(int curr, int start, int end)
{
if(start == end-1)
{
st[curr] = baseArray[start];
return;
}
int child1=(curr<<1);
int child2=child1 | 1;
int mid= (start + end)>>1;
make_tree(child1, start, mid);
make_tree(child2, mid, end);
st[curr] = max(st[child1], st[child2]);
}
void update_tree(int curr, int start, int end, int x, int val)
{
if(start > x || end <= x)
return;
if(start == x && start == end-1)
{
st[curr] = val;
return;
}
int c1 = (curr<<1), c2 = c1 | 1, m = (start+end)>>1;
update_tree(c1, start, m, x, val);
update_tree(c2, m, end, x, val);
st[curr] = max(st[c1], st[c2]);
}
void query_tree(int curr, int start, int end, int S, int E)
{
if(start >= E || end <= S)
{
qt[curr]=-1;
return;
}
else if(start >= S && end <= E)
{
qt[curr] = st[curr];
return;
}
int child1= (curr<<1);
int child2= child1 | 1;
int mid= (start + end)>>1;
query_tree(child1, start, mid, S, E);
query_tree(child2, mid, end, S, E);
qt[curr] = max(qt[child1], qt[child2]);
}
int query_up(int u,int v)
{
if(u == v)
return 0;
int uchain;
int vchain = chainInd[v];
int ans=-1;
while(1)
{
uchain = chainInd[u];
if(uchain == vchain)
{
if(u == v)
break;
query_tree(1, 0, ptr, posInBase[v]+1, posInBase[u]+1);
ans = max(ans, qt[1]);
break;
}
query_tree(1, 0, ptr, posInBase[chainHead[uchain]], posInBase[u]+1);
ans = max(ans, qt[1]);
u=P[chainHead[uchain]][0];
}
return ans;
}
int lca(int p, int q)
{
int tmp,lg,i;
if(level[p] < level[q])
tmp=p, p=q, q=tmp;
for(lg=1; (1<<lg) <= level[p]; lg++);
lg--;
for(i=lg;i>=0;i--)
{
if(level[p] - (1<<i) >= level[q])
{
p=P[p][i];
}
}
if(p == q)
return p;
for(i=lg;i>=0;i--)
{
if(P[p][i] != -1 && P[p][i] != P[q][i])
p=P[p][i], q=P[q][i];
}
return P[p][0];
}
void query(int u,int v)
{
int lc=lca(u,v);
int ans = max( query_up(u, lc), query_up(v, lc));
printf("%d\n",ans);
}
void change(int i, int val)
{
int u = otherEnd[i];
update_tree(1, 0, ptr, posInBase[u], val);
}
void HLD(int curr, int cost, int prev)
{
int i;
if(chainHead[chainNo] == -1)
{
chainHead[chainNo] == curr;
}
chainInd[curr]=chainNo;
posInBase[curr]=ptr;
baseArray[ptr++]=cost;
int sc=-1,ncost;
for(i=0;i<adj[curr].size();i++)
{
if(adj[curr][i] != prev)
{
if(sc == -1 || subsize[sc] < subsize[adj[curr][i]])
{
sc=adj[curr][i];
ncost= costs[curr][i];
}
}
}
if(sc != -1)
{
HLD(sc, ncost, curr);
}
for(i=0;i<adj[curr].size();i++)
{
if(adj[curr][i] != sc && adj[curr][i] != prev)
{
chainNo++;
HLD(adj[curr][i], costs[curr][i], curr);
}
}
}
void setLevels(int curr, int prev, int l=0)
{
P[curr][0]=prev;
level[curr]=l;
subsize[curr]=1;
for(int i=0;i<adj[curr].size();i++)
{
if(adj[curr][i] != prev)
{
otherEnd[indexx[curr][i]] = adj[curr][i];
setLevels(adj[curr][i], curr, l + 1);
subsize[curr] += subsize[adj[curr][i]];
}
}
}
int main()
{
int i,j,t;
int n;
char s[20];
int u,v,w;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ptr=0;
for(i=0;i<n;i++)
{
adj[i].clear();
costs[i].clear();
indexx[i].clear();
chainHead[i]=-1;
for(j=0;j<LN;j++)
P[i][j]=-1;
}
for(i=0;i<n-1;i++)
{
scanf("%d%d%d",&u,&v,&w);
u--;
v--;
adj[u].push_back(v);
adj[v].push_back(u);
costs[u].push_back(w);
costs[v].push_back(w);
indexx[u].push_back(i);
indexx[v].push_back(i);
}
chainNo=0;
setLevels(root,-1);
HLD(root, -1, -1);
make_tree(1, 0, ptr);
for(j=1;j<LN;j++)
{
for(i=0;i<n;i++)
{
if(P[i][j-1] != -1)
P[i][j] = P[P[i][j-1]][j-1];
}
}
while(1)
{
scanf("%s",s);
if(s[0] == 'D')
break;
scanf("%d%d",&u,&v);
if(s[0] == 'Q')
query(u-1,v-1);
else
change(u-1,v);
}
}
return 0;
}
LyoKICAgIEF1dGhvcjotU2FydGhhayBUYW5lamEKICAgIENTRSAybmQgeWVhcixNTk5JVCBBbGxhaGFiYWQKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSByb290IDAKI2RlZmluZSBOIDEwMDA1CiNkZWZpbmUgTE4gMTQKCnZlY3RvcjxpbnQ+IGFkaltOXSwgY29zdHNbTl0sIGluZGV4eFtOXTsKaW50IGJhc2VBcnJheVtOXSwgcHRyOwppbnQgY2hhaW5ObywgY2hhaW5JbmRbTl0sIGNoYWluSGVhZFtOXSwgcG9zSW5CYXNlW05dOwppbnQgbGV2ZWxbTl0sIFBbTl1bTE5dLCBvdGhlckVuZFtOXSwgc3Vic2l6ZVtOXTsKaW50IHN0W04qNl0sIHF0W04qNl07Cgp2b2lkIG1ha2VfdHJlZShpbnQgY3VyciwgaW50IHN0YXJ0LCBpbnQgZW5kKQp7CglpZihzdGFydCA9PSBlbmQtMSkKCXsKCQlzdFtjdXJyXSA9IGJhc2VBcnJheVtzdGFydF07CgkJcmV0dXJuOwoJfQoKCWludCBjaGlsZDE9KGN1cnI8PDEpOwoJaW50IGNoaWxkMj1jaGlsZDEgfCAxOwoJaW50IG1pZD0gKHN0YXJ0ICsgZW5kKT4+MTsKCgltYWtlX3RyZWUoY2hpbGQxLCBzdGFydCwgbWlkKTsKCW1ha2VfdHJlZShjaGlsZDIsIG1pZCwgZW5kKTsKCXN0W2N1cnJdID0gbWF4KHN0W2NoaWxkMV0sIHN0W2NoaWxkMl0pOwp9Cgp2b2lkIHVwZGF0ZV90cmVlKGludCBjdXJyLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCB4LCBpbnQgdmFsKQp7CglpZihzdGFydCA+IHggfHwgZW5kIDw9IHgpIAoJCXJldHVybjsKCWlmKHN0YXJ0ID09IHggJiYgc3RhcnQgPT0gZW5kLTEpCgl7CgkJc3RbY3Vycl0gPSB2YWw7CgkJcmV0dXJuOwoJfQoJaW50IGMxID0gKGN1cnI8PDEpLCBjMiA9IGMxIHwgMSwgbSA9IChzdGFydCtlbmQpPj4xOwoJdXBkYXRlX3RyZWUoYzEsIHN0YXJ0LCBtLCB4LCB2YWwpOwoJdXBkYXRlX3RyZWUoYzIsIG0sIGVuZCwgeCwgdmFsKTsKCXN0W2N1cnJdID0gbWF4KHN0W2MxXSwgc3RbYzJdKTsKfQoKdm9pZCBxdWVyeV90cmVlKGludCBjdXJyLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBTLCBpbnQgRSkKewoJaWYoc3RhcnQgPj0gRSB8fCBlbmQgPD0gUykKCXsKCQlxdFtjdXJyXT0tMTsKCQlyZXR1cm47Cgl9CgllbHNlIGlmKHN0YXJ0ID49IFMgJiYgZW5kIDw9IEUpCgl7CgkJcXRbY3Vycl0gPSBzdFtjdXJyXTsKCQlyZXR1cm47Cgl9CgoJaW50IGNoaWxkMT0gKGN1cnI8PDEpOwoJaW50IGNoaWxkMj0gY2hpbGQxIHwgMTsKCWludCBtaWQ9IChzdGFydCArIGVuZCk+PjE7CglxdWVyeV90cmVlKGNoaWxkMSwgc3RhcnQsIG1pZCwgUywgRSk7CglxdWVyeV90cmVlKGNoaWxkMiwgbWlkLCBlbmQsIFMsIEUpOwoJcXRbY3Vycl0gPSBtYXgocXRbY2hpbGQxXSwgcXRbY2hpbGQyXSk7Cn0KCgppbnQgcXVlcnlfdXAoaW50IHUsaW50IHYpCnsKCWlmKHUgPT0gdikKCQlyZXR1cm4gMDsKCglpbnQgdWNoYWluOwoJaW50IHZjaGFpbiA9IGNoYWluSW5kW3ZdOwoJaW50IGFucz0tMTsKCgl3aGlsZSgxKQoJewoJCXVjaGFpbiA9IGNoYWluSW5kW3VdOwoJCWlmKHVjaGFpbiA9PSB2Y2hhaW4pCgkJewoJCQlpZih1ID09IHYpCgkJCQlicmVhazsKCQkJcXVlcnlfdHJlZSgxLCAwLCBwdHIsIHBvc0luQmFzZVt2XSsxLCBwb3NJbkJhc2VbdV0rMSk7CgkJCWFucyA9IG1heChhbnMsIHF0WzFdKTsKCQkJYnJlYWs7CgkJfQoKCQlxdWVyeV90cmVlKDEsIDAsIHB0ciwgcG9zSW5CYXNlW2NoYWluSGVhZFt1Y2hhaW5dXSwgcG9zSW5CYXNlW3VdKzEpOwoJCWFucyA9IG1heChhbnMsIHF0WzFdKTsKCQl1PVBbY2hhaW5IZWFkW3VjaGFpbl1dWzBdOwkKCX0KCglyZXR1cm4gYW5zOwp9CgppbnQgbGNhKGludCBwLCBpbnQgcSkKewoJaW50IHRtcCxsZyxpOwoKCWlmKGxldmVsW3BdIDwgbGV2ZWxbcV0pCgkJdG1wPXAsIHA9cSwgcT10bXA7CgoJZm9yKGxnPTE7ICgxPDxsZykgPD0gbGV2ZWxbcF07IGxnKyspOwoJbGctLTsKCQoJZm9yKGk9bGc7aT49MDtpLS0pCgl7CgkJaWYobGV2ZWxbcF0gLSAoMTw8aSkgPj0gbGV2ZWxbcV0pCgkJewoJCQlwPVBbcF1baV07CgkJfQoJfQoKCWlmKHAgPT0gcSkKCQlyZXR1cm4gcDsKCglmb3IoaT1sZztpPj0wO2ktLSkKCXsKCQlpZihQW3BdW2ldICE9IC0xICYmIFBbcF1baV0gIT0gUFtxXVtpXSkKCQkJcD1QW3BdW2ldLCBxPVBbcV1baV07Cgl9CgoJcmV0dXJuIFBbcF1bMF07Cn0KCnZvaWQgcXVlcnkoaW50IHUsaW50IHYpCnsKCWludCBsYz1sY2EodSx2KTsKCWludCBhbnMgPSBtYXgoIHF1ZXJ5X3VwKHUsIGxjKSwgcXVlcnlfdXAodiwgbGMpKTsKCXByaW50ZigiJWRcbiIsYW5zKTsKfQoKdm9pZCBjaGFuZ2UoaW50IGksIGludCB2YWwpIAp7CglpbnQgdSA9IG90aGVyRW5kW2ldOwoJdXBkYXRlX3RyZWUoMSwgMCwgcHRyLCBwb3NJbkJhc2VbdV0sIHZhbCk7Cn0KCnZvaWQgSExEKGludCBjdXJyLCBpbnQgY29zdCwgaW50IHByZXYpCnsKCWludCBpOwoJaWYoY2hhaW5IZWFkW2NoYWluTm9dID09IC0xKQoJewoJCWNoYWluSGVhZFtjaGFpbk5vXSA9PSBjdXJyOwoJfQoKCWNoYWluSW5kW2N1cnJdPWNoYWluTm87Cglwb3NJbkJhc2VbY3Vycl09cHRyOwoJYmFzZUFycmF5W3B0cisrXT1jb3N0OwoKCWludCBzYz0tMSxuY29zdDsKCglmb3IoaT0wO2k8YWRqW2N1cnJdLnNpemUoKTtpKyspCgl7CgkJaWYoYWRqW2N1cnJdW2ldICE9IHByZXYpCgkJewoJCQlpZihzYyA9PSAtMSB8fCBzdWJzaXplW3NjXSA8IHN1YnNpemVbYWRqW2N1cnJdW2ldXSkKCQkJewoJCQkJc2M9YWRqW2N1cnJdW2ldOwoJCQkJbmNvc3Q9IGNvc3RzW2N1cnJdW2ldOwoJCQl9CgkJfQoJfQoKCWlmKHNjICE9IC0xKQoJewoJCUhMRChzYywgbmNvc3QsIGN1cnIpOwoJfQoKCWZvcihpPTA7aTxhZGpbY3Vycl0uc2l6ZSgpO2krKykKCXsKCQlpZihhZGpbY3Vycl1baV0gIT0gc2MgJiYgYWRqW2N1cnJdW2ldICE9IHByZXYpCgkJewoJCQljaGFpbk5vKys7CgkJCUhMRChhZGpbY3Vycl1baV0sIGNvc3RzW2N1cnJdW2ldLCBjdXJyKTsKCQl9Cgl9Cgp9Cgp2b2lkIHNldExldmVscyhpbnQgY3VyciwgaW50IHByZXYsIGludCBsPTApCnsKCVBbY3Vycl1bMF09cHJldjsKCWxldmVsW2N1cnJdPWw7CglzdWJzaXplW2N1cnJdPTE7Cglmb3IoaW50IGk9MDtpPGFkaltjdXJyXS5zaXplKCk7aSsrKQoJewoJCWlmKGFkaltjdXJyXVtpXSAhPSBwcmV2KQoJCXsKCQkJb3RoZXJFbmRbaW5kZXh4W2N1cnJdW2ldXSA9IGFkaltjdXJyXVtpXTsKCQkJc2V0TGV2ZWxzKGFkaltjdXJyXVtpXSwgY3VyciwgbCArIDEpOwoJCQlzdWJzaXplW2N1cnJdICs9IHN1YnNpemVbYWRqW2N1cnJdW2ldXTsgCgkJfQoJfQp9CgppbnQgbWFpbigpCnsKCWludCBpLGosdDsKCWludCBuOwoJY2hhciBzWzIwXTsKCWludCB1LHYsdzsKCglzY2FuZigiJWQiLCZ0KTsKCXdoaWxlKHQtLSkKCXsKCQlzY2FuZigiJWQiLCZuKTsKCQlwdHI9MDsKCgkJZm9yKGk9MDtpPG47aSsrKQoJCXsKCQkJYWRqW2ldLmNsZWFyKCk7CgkJCWNvc3RzW2ldLmNsZWFyKCk7CgkJCWluZGV4eFtpXS5jbGVhcigpOwoJCQljaGFpbkhlYWRbaV09LTE7CgkJCWZvcihqPTA7ajxMTjtqKyspCgkJCQlQW2ldW2pdPS0xOwoJCX0KCgkJZm9yKGk9MDtpPG4tMTtpKyspCgkJewoJCQlzY2FuZigiJWQlZCVkIiwmdSwmdiwmdyk7CgkJCXUtLTsKCQkJdi0tOwoJCQlhZGpbdV0ucHVzaF9iYWNrKHYpOwoJCQlhZGpbdl0ucHVzaF9iYWNrKHUpOwoJCQljb3N0c1t1XS5wdXNoX2JhY2sodyk7CgkJCWNvc3RzW3ZdLnB1c2hfYmFjayh3KTsKCQkJaW5kZXh4W3VdLnB1c2hfYmFjayhpKTsKCQkJaW5kZXh4W3ZdLnB1c2hfYmFjayhpKTsKCQl9CgoJCWNoYWluTm89MDsKCQlzZXRMZXZlbHMocm9vdCwtMSk7CgkJSExEKHJvb3QsIC0xLCAtMSk7CgkJbWFrZV90cmVlKDEsIDAsIHB0cik7CgoJCWZvcihqPTE7ajxMTjtqKyspCQoJCXsKCQkJZm9yKGk9MDtpPG47aSsrKQoJCQl7CgkJCQlpZihQW2ldW2otMV0gIT0gLTEpCgkJCQlQW2ldW2pdID0gUFtQW2ldW2otMV1dW2otMV07CgkJCX0KCQl9CgoJCXdoaWxlKDEpCgkJewoJCQlzY2FuZigiJXMiLHMpOwoKCQkJaWYoc1swXSA9PSAnRCcpCgkJCQlicmVhazsKCgkJCXNjYW5mKCIlZCVkIiwmdSwmdik7CgkJCWlmKHNbMF0gPT0gJ1EnKQoJCQkJcXVlcnkodS0xLHYtMSk7CgkJCWVsc2UKCQkJCWNoYW5nZSh1LTEsdik7CgkJfQoJfQoJcmV0dXJuIDA7CQp9