//agrawal117
//chahatagrawal117
#include<bits/stdc++.h>
#define endl '\n'
#define mod 1000000007
typedef long long int ll;
using namespace std;
#define MAX 10005
#define MAXLOG 14
int chainId[MAX]; // chainId on ith node
int position[MAX]; // position in base array of ith node
int chainHead[MAX]; // which head node is there at ith chain
int chain=1;
int pos=1;
int subtree[MAX];
int level[MAX];
int parent[MAX][MAXLOG];
int logs[MAX];
vector<pair<ll,ll>> v[MAX];
ll tree[MAX<<2];
ll arr[MAX]; // denotes weight array ( //base array )
ll n;
pair<int,int> edges[MAX];
void clear()
{
chain=1;
pos=1;
for(int i=1;i<=n;i++) for(int j=0;j<MAXLOG;j++) parent[i][j]=-1;
for(int i=1;i<=n;i++) v[i].clear();
}
void log_power()
{
logs[1]=0;
for(int i=2;i<MAX;i++) logs[i]=logs[i/2]+1;
}
ll combine(ll a,ll b) // 1 based indexing remember;
{
if(a>=b) return a;
return b;
}
void build(ll start,ll end,ll node)
{
if(start==end){
tree[node]=arr[start];
return;
}
ll mid=(start+end)>>1;
build(start,mid,2*node);
build(mid+1,end,(2*node)+1);
tree[node]=combine(tree[2*node],tree[(2*node)+1]);
}
ll query(ll start,ll end,ll node,ll l,ll r)
{
if(start>r || l>end) { //no overlap case return that value which does not affect the ans
return INT_MIN; // as in case of sum we can return 0;
}
else if(l<=start && r>=end) {
return tree[node]; // case of fully overlap
}
else{
ll mid=(start+end)>>1; //partial overlap so call both children
ll child1=query(start,mid,2*node,l,r);
ll child2=query(mid+1,end,(2*node)+1,l,r);
return combine(child1,child2);
}
}
void update(ll start,ll end,ll node,ll idx,ll value)
{
if(start==end){
tree[node]=value;
arr[start]=value;
return;
}
ll mid=(start+end)>>1;
if(start<=idx && idx<=mid){
update(start,mid,2*node,idx,value);
}
else{
update(mid+1,end,(2*node)+1,idx,value);
}
tree[node]=combine(tree[2*node],tree[(2*node)+1]);
}
ll query_up(int a, int b) // b must be the ancestor of a
{
ll ans=0;
while(chainId[a]!=chainId[b]){
int ch=chainId[a];
int head=chainHead[ch];
ll val=query(1,n,1,position[head],position[a]);
ans=combine(ans,val);
a=parent[head][0];
}
if(a==b) return ans;
// now in same chain left limit is position[b]+1 as at this position. weight of b and its heavy child is there
ll val=query(1,n,1,position[b]+1, position[a]);
ans=combine(ans,val);
return ans;
}
void hld(int node, int par,ll weight)
{
position[node]=pos;
arr[pos]=weight;
chainId[node]=chain;
pos++;
int hnode=-1; int hsize=0; int hweight=-1; // heavynode // heavy_subtree_size // heavy weight
for(auto i: v[node]){
if(i.first==par) continue;
if(subtree[i.first]>hsize) {
hsize=subtree[i.first];
hnode=i.first;
hweight=i.second;
}
}
if(hnode!=-1){
hld(hnode,node,hweight);
}
for(auto i: v[node]) // for rest of the nodes
{
if(i.first==par || i.first ==hnode) continue;
chain++;
chainHead[chain]=i.first;
hld(i.first,node,i.second);
}
}
void dfs(int node , int par)
{
subtree[node]=1;
parent[node][0]=par;
for(int i=1;i<MAXLOG;i++){
if(parent[node][i]!=-1) parent[node][i]=parent[parent[node][i-1]][i-1];
}
for(auto i: v[node])
{
if(i.first==par) continue;
level[i.first]=level[node]+1;
dfs(i.first,node);
subtree[node]+=subtree[i.first];
}
}
int LCA(int a, int b)
{
if(level[a]<level[b]) swap(a,b);
ll dist=level[a]-level[b];
while(dist>0)
{
a=parent[a][logs[dist]];
dist=(dist-(1LL<<logs[dist]));
}
if(a==b) return a;
for(int i=MAXLOG-1;i>=0;i--){
if(parent[a][i]!=-1 && parent[b][i]!=-1 && parent[a][i]!=parent[b][i]) a=parent[a][i], b=parent[b][i];
}
return parent[a][0];
}
int main()
{
// ios_base::sync_with_stdio(0);
// cin.tie(0);
// cout.tie(0);
int t; scanf("%d", &t);
log_power();
while(t--)
{
scanf("%d", &n);
for(int i=1;i<=n-1;i++){
ll a,b,c; scanf("%lld %lld %lld", &a, &b, &c);
v[a].push_back({b,c});
v[b].push_back({a,c});
edges[i]={a,b};
}
dfs(1,-1);
chainHead[1]=1;
hld(1,-1,0);
build(1,n,1);
ll a,b,c;
while(1)
{
char s[10];
scanf("%s", s);
if(s[0]=='D') break;
if(s[0]=='Q') {
scanf("%lld %lld", &a, &b);
int lca=LCA(a,b);
ll ans=query_up(a,lca);
ll val=query_up(b,lca);
ans=combine(ans,val);
printf("%lld\n", ans);
}
else{
scanf("%lld %lld", &a, &c);
int x=edges[a].first; int y=edges[a].second;
if(level[x]<level[y]) swap(x,y);
update(1,n,1,position[x],c);
}
}
clear();
}
return 0;
}
Ly9hZ3Jhd2FsMTE3Ci8vY2hhaGF0YWdyYXdhbDExNwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIG1vZCAxMDAwMDAwMDA3CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBNQVggMTAwMDUKI2RlZmluZSBNQVhMT0cgMTQKaW50IGNoYWluSWRbTUFYXTsgLy8gY2hhaW5JZCBvbiBpdGggbm9kZQppbnQgcG9zaXRpb25bTUFYXTsgLy8gcG9zaXRpb24gaW4gYmFzZSBhcnJheSBvZiAgaXRoIG5vZGUKaW50IGNoYWluSGVhZFtNQVhdOyAgLy8gd2hpY2ggaGVhZCBub2RlIGlzIHRoZXJlIGF0IGl0aCBjaGFpbgoKaW50IGNoYWluPTE7CmludCBwb3M9MTsKCmludCBzdWJ0cmVlW01BWF07CmludCBsZXZlbFtNQVhdOwppbnQgcGFyZW50W01BWF1bTUFYTE9HXTsKaW50IGxvZ3NbTUFYXTsKCnZlY3RvcjxwYWlyPGxsLGxsPj4gdltNQVhdOwoKbGwgdHJlZVtNQVg8PDJdOwpsbCBhcnJbTUFYXTsgICAgLy8gZGVub3RlcyB3ZWlnaHQgYXJyYXkgKCAvL2Jhc2UgYXJyYXkgKQpsbCBuOwpwYWlyPGludCxpbnQ+IGVkZ2VzW01BWF07CnZvaWQgY2xlYXIoKQp7CiAgICBjaGFpbj0xOwogICAgcG9zPTE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgZm9yKGludCBqPTA7ajxNQVhMT0c7aisrKSBwYXJlbnRbaV1bal09LTE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgdltpXS5jbGVhcigpOwp9CnZvaWQgbG9nX3Bvd2VyKCkKewogICAgbG9nc1sxXT0wOwogICAgZm9yKGludCBpPTI7aTxNQVg7aSsrKSBsb2dzW2ldPWxvZ3NbaS8yXSsxOwp9CgoKCmxsIGNvbWJpbmUobGwgYSxsbCBiKQkJCQkJLy8gMSBiYXNlZCBpbmRleGluZyByZW1lbWJlcjsKewoJaWYoYT49YikgcmV0dXJuIGE7CglyZXR1cm4gYjsKfQoKdm9pZCBidWlsZChsbCBzdGFydCxsbCBlbmQsbGwgbm9kZSkKewoJaWYoc3RhcnQ9PWVuZCl7CgkJdHJlZVtub2RlXT1hcnJbc3RhcnRdOwoJCXJldHVybjsKCX0KCWxsIG1pZD0oc3RhcnQrZW5kKT4+MTsKCWJ1aWxkKHN0YXJ0LG1pZCwyKm5vZGUpOwoJYnVpbGQobWlkKzEsZW5kLCgyKm5vZGUpKzEpOwoJdHJlZVtub2RlXT1jb21iaW5lKHRyZWVbMipub2RlXSx0cmVlWygyKm5vZGUpKzFdKTsKfQoKbGwgcXVlcnkobGwgc3RhcnQsbGwgZW5kLGxsIG5vZGUsbGwgbCxsbCByKQp7CglpZihzdGFydD5yIHx8IGw+ZW5kKSB7CQkJCS8vbm8gb3ZlcmxhcCBjYXNlICByZXR1cm4gdGhhdCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhZmZlY3QgdGhlIGFucyAKCQlyZXR1cm4gSU5UX01JTjsJCQkJCQkJLy8gYXMgaW4gY2FzZSBvZiBzdW0gd2UgY2FuIHJldHVybiAwOwoJfQoJZWxzZSBpZihsPD1zdGFydCAmJiByPj1lbmQpIHsKCQlyZXR1cm4gdHJlZVtub2RlXTsgICAgICAgICAgIC8vIGNhc2Ugb2YgZnVsbHkgb3ZlcmxhcAoJfQoJZWxzZXsKCQlsbCBtaWQ9KHN0YXJ0K2VuZCk+PjE7CQkJCQkJCQkvL3BhcnRpYWwgb3ZlcmxhcCBzbyBjYWxsIGJvdGggY2hpbGRyZW4KCQlsbCBjaGlsZDE9cXVlcnkoc3RhcnQsbWlkLDIqbm9kZSxsLHIpOwoJCWxsIGNoaWxkMj1xdWVyeShtaWQrMSxlbmQsKDIqbm9kZSkrMSxsLHIpOwoJCXJldHVybiBjb21iaW5lKGNoaWxkMSxjaGlsZDIpOwoJfQp9Cgp2b2lkIHVwZGF0ZShsbCBzdGFydCxsbCBlbmQsbGwgbm9kZSxsbCBpZHgsbGwgdmFsdWUpCnsKCSBpZihzdGFydD09ZW5kKXsKCQl0cmVlW25vZGVdPXZhbHVlOwoJCWFycltzdGFydF09dmFsdWU7CgkJcmV0dXJuOwoJfQoJbGwgbWlkPShzdGFydCtlbmQpPj4xOwkKCWlmKHN0YXJ0PD1pZHggJiYgaWR4PD1taWQpewoJIHVwZGF0ZShzdGFydCxtaWQsMipub2RlLGlkeCx2YWx1ZSk7Cgl9CgkgZWxzZXsKCQl1cGRhdGUobWlkKzEsZW5kLCgyKm5vZGUpKzEsaWR4LHZhbHVlKTsKCSB9Cgl0cmVlW25vZGVdPWNvbWJpbmUodHJlZVsyKm5vZGVdLHRyZWVbKDIqbm9kZSkrMV0pOwp9CgoKbGwgcXVlcnlfdXAoaW50IGEsIGludCBiKSAvLyBiIG11c3QgYmUgdGhlIGFuY2VzdG9yIG9mIGEKewogICAgCiAgICBsbCBhbnM9MDsKICAgIHdoaWxlKGNoYWluSWRbYV0hPWNoYWluSWRbYl0pewogICAgICAgIGludCBjaD1jaGFpbklkW2FdOwogICAgICAgIGludCBoZWFkPWNoYWluSGVhZFtjaF07CiAgICAgICAgbGwgdmFsPXF1ZXJ5KDEsbiwxLHBvc2l0aW9uW2hlYWRdLHBvc2l0aW9uW2FdKTsKICAgICAgICBhbnM9Y29tYmluZShhbnMsdmFsKTsKICAgICAgICBhPXBhcmVudFtoZWFkXVswXTsKICAgIH0KICAgIGlmKGE9PWIpIHJldHVybiBhbnM7CiAgICAvLyBub3cgaW4gc2FtZSBjaGFpbiBsZWZ0IGxpbWl0IGlzIHBvc2l0aW9uW2JdKzEgYXMgYXQgdGhpcyBwb3NpdGlvbi4gd2VpZ2h0IG9mIGIgYW5kIGl0cyBoZWF2eSBjaGlsZCBpcyB0aGVyZQogICAgbGwgdmFsPXF1ZXJ5KDEsbiwxLHBvc2l0aW9uW2JdKzEsIHBvc2l0aW9uW2FdKTsKICAgIGFucz1jb21iaW5lKGFucyx2YWwpOwogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBobGQoaW50IG5vZGUsIGludCBwYXIsbGwgd2VpZ2h0KQp7CiAgICBwb3NpdGlvbltub2RlXT1wb3M7CiAgICBhcnJbcG9zXT13ZWlnaHQ7CiAgICBjaGFpbklkW25vZGVdPWNoYWluOwogICAgcG9zKys7CiAgICBpbnQgaG5vZGU9LTE7IGludCBoc2l6ZT0wOyBpbnQgaHdlaWdodD0tMTsgICAvLyBoZWF2eW5vZGUgLy8gaGVhdnlfc3VidHJlZV9zaXplIC8vIGhlYXZ5IHdlaWdodAogICAgZm9yKGF1dG8gaTogdltub2RlXSl7CiAgICAgICAgaWYoaS5maXJzdD09cGFyKSBjb250aW51ZTsKICAgICAgICBpZihzdWJ0cmVlW2kuZmlyc3RdPmhzaXplKSB7CiAgICAgICAgICAgIGhzaXplPXN1YnRyZWVbaS5maXJzdF07CiAgICAgICAgICAgIGhub2RlPWkuZmlyc3Q7CiAgICAgICAgICAgIGh3ZWlnaHQ9aS5zZWNvbmQ7CiAgICAgICAgfQogICAgfQogICAgaWYoaG5vZGUhPS0xKXsKICAgICAgICBobGQoaG5vZGUsbm9kZSxod2VpZ2h0KTsKICAgIH0KICAgIAogICAgZm9yKGF1dG8gaTogdltub2RlXSkgICAgICAgICAvLyBmb3IgcmVzdCBvZiB0aGUgbm9kZXMKICAgIHsKICAgICAgICBpZihpLmZpcnN0PT1wYXIgfHwgaS5maXJzdCA9PWhub2RlKSBjb250aW51ZTsKICAgICAgICBjaGFpbisrOwogICAgICAgIGNoYWluSGVhZFtjaGFpbl09aS5maXJzdDsKICAgICAgICBobGQoaS5maXJzdCxub2RlLGkuc2Vjb25kKTsKICAgIH0KICAgIAp9CnZvaWQgZGZzKGludCBub2RlICwgaW50IHBhcikKewogICAgc3VidHJlZVtub2RlXT0xOwogICAgcGFyZW50W25vZGVdWzBdPXBhcjsKICAgIGZvcihpbnQgaT0xO2k8TUFYTE9HO2krKyl7CiAgICAgICAgaWYocGFyZW50W25vZGVdW2ldIT0tMSkgcGFyZW50W25vZGVdW2ldPXBhcmVudFtwYXJlbnRbbm9kZV1baS0xXV1baS0xXTsKICAgIH0KICAgIGZvcihhdXRvIGk6IHZbbm9kZV0pCiAgICB7CiAgICAgICAgaWYoaS5maXJzdD09cGFyKSBjb250aW51ZTsKICAgICAgICBsZXZlbFtpLmZpcnN0XT1sZXZlbFtub2RlXSsxOwogICAgICAgIGRmcyhpLmZpcnN0LG5vZGUpOwogICAgICAgIHN1YnRyZWVbbm9kZV0rPXN1YnRyZWVbaS5maXJzdF07CiAgICB9Cn0KaW50IExDQShpbnQgYSwgaW50IGIpCnsKICAgIGlmKGxldmVsW2FdPGxldmVsW2JdKSBzd2FwKGEsYik7CiAgICBsbCBkaXN0PWxldmVsW2FdLWxldmVsW2JdOwogICAgd2hpbGUoZGlzdD4wKQogICAgewogICAgICAgIGE9cGFyZW50W2FdW2xvZ3NbZGlzdF1dOwogICAgICAgIGRpc3Q9KGRpc3QtKDFMTDw8bG9nc1tkaXN0XSkpOwogICAgfQogICAgaWYoYT09YikgcmV0dXJuIGE7CiAgICBmb3IoaW50IGk9TUFYTE9HLTE7aT49MDtpLS0pewogICAgICAgIGlmKHBhcmVudFthXVtpXSE9LTEgJiYgcGFyZW50W2JdW2ldIT0tMSAmJiBwYXJlbnRbYV1baV0hPXBhcmVudFtiXVtpXSkgYT1wYXJlbnRbYV1baV0sIGI9cGFyZW50W2JdW2ldOwogICAgfQogICAgcmV0dXJuIHBhcmVudFthXVswXTsKfQoKaW50IG1haW4oKQp7CiAgICAvLyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgLy8gY2luLnRpZSgwKTsKICAgIC8vIGNvdXQudGllKDApOwogICAgaW50IHQ7IHNjYW5mKCIlZCIsICZ0KTsKICAgIGxvZ19wb3dlcigpOwogICAgd2hpbGUodC0tKQogICAgewogICAgICAgIHNjYW5mKCIlZCIsICZuKTsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uLTE7aSsrKXsKICAgICAgICAgICAgbGwgYSxiLGM7IHNjYW5mKCIlbGxkICVsbGQgJWxsZCIsICZhLCAmYiwgJmMpOwogICAgICAgICAgICB2W2FdLnB1c2hfYmFjayh7YixjfSk7CiAgICAgICAgICAgIHZbYl0ucHVzaF9iYWNrKHthLGN9KTsKICAgICAgICAgICAgZWRnZXNbaV09e2EsYn07CiAgICAgICAgfQogICAgICAgIGRmcygxLC0xKTsKICAgICAgICAKICAgICAgICBjaGFpbkhlYWRbMV09MTsKICAgICAgICBobGQoMSwtMSwwKTsKICAgICAgICAKICAgICAgICBidWlsZCgxLG4sMSk7CiAgICAgICAgCiAgICAgICAgbGwgYSxiLGM7CiAgICAgICAgd2hpbGUoMSkKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgc1sxMF07CgkJCXNjYW5mKCIlcyIsIHMpOwogICAgICAgICAgICBpZihzWzBdPT0nRCcpIGJyZWFrOwogICAgICAgICAgICBpZihzWzBdPT0nUScpIHsKICAgICAgICAgICAgICAgIHNjYW5mKCIlbGxkICVsbGQiLCAmYSwgJmIpOwogICAgICAgICAgICAgICAgaW50IGxjYT1MQ0EoYSxiKTsKICAgICAgICAgICAgICAgIGxsIGFucz1xdWVyeV91cChhLGxjYSk7CiAgICAgICAgICAgICAgICBsbCB2YWw9cXVlcnlfdXAoYixsY2EpOwogICAgICAgICAgICAgICAgYW5zPWNvbWJpbmUoYW5zLHZhbCk7CiAgICAgICAgICAgICAgICBwcmludGYoIiVsbGRcbiIsIGFucyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgc2NhbmYoIiVsbGQgJWxsZCIsICZhLCAmYyk7CiAgICAgICAgICAgICAgICBpbnQgeD1lZGdlc1thXS5maXJzdDsgaW50IHk9ZWRnZXNbYV0uc2Vjb25kOwogICAgICAgICAgICAgICAgaWYobGV2ZWxbeF08bGV2ZWxbeV0pIHN3YXAoeCx5KTsgCiAgICAgICAgICAgICAgICB1cGRhdGUoMSxuLDEscG9zaXRpb25beF0sYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xlYXIoKTsKICAgICAgICAKICAgIH0KICAgIAogICAgcmV0dXJuIDA7Cn0=