#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define mp make_pair
#define MAX(x, y) (((x) > (y))? (x) : (y))
const int N = 20000;
int n, heavy[N], root[N], p[N];
int pos[N], num[N], depth[N], t[6*N], a[N], b[N], vtx[N];
vector<pair<int, pair<int, int> > > g[N];
int dfs(int v = 0, int prnt = -1, int d = 0)
{
int size = 1, MAXsize = 0;
depth[v] = d;
p[v] = prnt;
for(int i=0;i<g[v].size();++i)
{
int u = g[v][i].X;
int c = g[v][i].Y.X , idx = g[v][i].Y.Y;
if(u != prnt)
{
int subsize = dfs(u, v, d + 1);
if(subsize > MAXsize)
{
MAXsize = subsize;
heavy[v] = u;
}
vtx[idx] = u;
size += subsize;
a[u] = c;
}
}
return size;
}
void hld()
{
for(int i=0, currpos = 0; i < n; ++i)
if(p[i] == -1 || heavy[p[i]] != i)
for(int j = i; j != -1; j = heavy[j])
{
root[j] = i;
num[j] = currpos; b[currpos] = a[j];
currpos++;
}
}
void build(int node, int start, int end)
{
if(start == end)
{
t[node] = b[start];
return ;
}
int mid = (start + end)/2;
build(2*node, start, mid);
build(2*node + 1, mid + 1, end);
t[node] = t[2*node] > t[2*node] ? t[2*node] : t[2*node + 1];
}
int query(int node, int start, int end, int l, int r)
{
if(end < l || start > r)
return 0;
if(start >= l && end <= r)
return t[node];
int mid = (start + end)/2;
int p1 = query(2*node, start, mid, l, r);
int p2 = query(2*node + 1, mid + 1, end, l, r);
return (p1 > p2 ? p1 : p2);
}
void update(int node, int start, int end, int idx, int val)
{
if(start == end)
{
t[node] = b[start] = val;
return ;
}
int mid = (start + end)/2;
if(idx <= mid)update(2*node, start, mid, idx, val);
else update(2*node + 1, mid + 1, end, idx, val);
}
int find(int a, int b)
{
int res = 0;
while(root[a] != root[b])
{
if(depth[root[a]] < depth[root[b]])
swap(a, b);
res = MAX(res, query(1, 0, n-1, num[root[a]], num[a]));
a = p[root[a]];
}
if(depth[a] > depth[b])
swap(a, b);
res = MAX(res, query(1, 0, n-1, num[a] + 1, num[b]));
return res;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
for(int i=0;i<n -1;++i)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c); a--; b--;
g[a].push_back(mp(b, mp(c, i) ) );
g[b].push_back(mp(a, mp(c, i) ) );
}
for(int i=0;i<n;++i)
heavy[i] = -1;
a[0] = 0;
dfs(0); hld(); build(1, 0, n-1);
while(1)
{
char s[10];
scanf("%s", s);
if(s[0] == 'D')break;
else if(s[0] == 'C')
{
int i, ti;
scanf("%d %d", &i, &ti); i--;
update(1, 0, n-1, num[vtx[i]], ti);
}
else
{
int a, b;
scanf("%d %d", &a, &b); a--; b--;
printf("%d\n", find(a, b));
}
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBYIGZpcnN0IAojZGVmaW5lIFkgc2Vjb25kIAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIE1BWCh4LCB5KSAoKCh4KSA+ICh5KSk/ICh4KSA6ICh5KSkKCmNvbnN0IGludCBOID0gMjAwMDA7CgppbnQgbiwgaGVhdnlbTl0sIHJvb3RbTl0sIHBbTl07CmludCBwb3NbTl0sIG51bVtOXSwgZGVwdGhbTl0sIHRbNipOXSwgYVtOXSwgYltOXSwgdnR4W05dOwoKdmVjdG9yPHBhaXI8aW50LCBwYWlyPGludCwgaW50PiA+ID4gZ1tOXTsKCmludCBkZnMoaW50IHYgPSAwLCBpbnQgcHJudCA9IC0xLCBpbnQgZCA9IDApCnsKCWludCBzaXplID0gMSwgTUFYc2l6ZSA9IDA7CglkZXB0aFt2XSA9IGQ7CglwW3ZdID0gcHJudDsKCWZvcihpbnQgaT0wO2k8Z1t2XS5zaXplKCk7KytpKQoJewoJCWludCB1ID0gZ1t2XVtpXS5YOwoJCWludCBjID0gZ1t2XVtpXS5ZLlggLCBpZHggPSBnW3ZdW2ldLlkuWTsKCQlpZih1ICE9IHBybnQpCgkJewoJCQlpbnQgc3Vic2l6ZSA9IGRmcyh1LCB2LCBkICsgMSk7CgkJCWlmKHN1YnNpemUgPiBNQVhzaXplKQoJCQl7CgkJCQlNQVhzaXplID0gc3Vic2l6ZTsKCQkJCWhlYXZ5W3ZdID0gdTsKCQkJfQoJCQl2dHhbaWR4XSA9IHU7CgkJCXNpemUgKz0gc3Vic2l6ZTsKCQkJYVt1XSA9IGM7CgkJfQoJfQoJcmV0dXJuIHNpemU7Cn0KCnZvaWQgaGxkKCkKewoJZm9yKGludCBpPTAsIGN1cnJwb3MgPSAwOyBpIDwgbjsgKytpKQoJCWlmKHBbaV0gPT0gLTEgfHwgaGVhdnlbcFtpXV0gIT0gaSkKCQkJZm9yKGludCBqID0gaTsgaiAhPSAtMTsgaiA9IGhlYXZ5W2pdKQoJCQl7CgkJCQlyb290W2pdID0gaTsKCQkJCW51bVtqXSA9IGN1cnJwb3M7IGJbY3VycnBvc10gPSBhW2pdOwoJCQkJY3VycnBvcysrOwoJCQl9Cn0KCnZvaWQgYnVpbGQoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCkKewoJaWYoc3RhcnQgPT0gZW5kKQoJewoJCXRbbm9kZV0gPSBiW3N0YXJ0XTsKCQlyZXR1cm4gOwoJfQoJaW50IG1pZCA9IChzdGFydCArIGVuZCkvMjsKCWJ1aWxkKDIqbm9kZSwgc3RhcnQsIG1pZCk7CglidWlsZCgyKm5vZGUgKyAxLCBtaWQgKyAxLCBlbmQpOwoJdFtub2RlXSA9IHRbMipub2RlXSA+IHRbMipub2RlXSA/IHRbMipub2RlXSA6IHRbMipub2RlICsgMV07Cn0KCmludCBxdWVyeShpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgbCwgaW50IHIpCnsKCWlmKGVuZCA8IGwgfHwgc3RhcnQgPiByKQoJCXJldHVybiAwOwoJaWYoc3RhcnQgPj0gbCAmJiBlbmQgPD0gcikKCQlyZXR1cm4gdFtub2RlXTsKCWludCBtaWQgPSAoc3RhcnQgKyBlbmQpLzI7CglpbnQgcDEgPSBxdWVyeSgyKm5vZGUsIHN0YXJ0LCBtaWQsIGwsIHIpOwoJaW50IHAyID0gcXVlcnkoMipub2RlICsgMSwgbWlkICsgMSwgZW5kLCBsLCByKTsKCXJldHVybiAocDEgPiBwMiA/IHAxIDogcDIpOwp9Cgp2b2lkIHVwZGF0ZShpbnQgbm9kZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgaWR4LCBpbnQgdmFsKQp7CglpZihzdGFydCA9PSBlbmQpCgl7CgkJdFtub2RlXSA9IGJbc3RhcnRdID0gdmFsOwoJCXJldHVybiA7Cgl9CglpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKS8yOwoJaWYoaWR4IDw9IG1pZCl1cGRhdGUoMipub2RlLCBzdGFydCwgbWlkLCBpZHgsIHZhbCk7CgllbHNlIHVwZGF0ZSgyKm5vZGUgKyAxLCBtaWQgKyAxLCBlbmQsIGlkeCwgdmFsKTsKfQoKaW50IGZpbmQoaW50IGEsIGludCBiKQp7CglpbnQgcmVzID0gMDsKCXdoaWxlKHJvb3RbYV0gIT0gcm9vdFtiXSkKCXsKCQlpZihkZXB0aFtyb290W2FdXSA8IGRlcHRoW3Jvb3RbYl1dKQoJCQlzd2FwKGEsIGIpOwoJCXJlcyA9IE1BWChyZXMsIHF1ZXJ5KDEsIDAsIG4tMSwgbnVtW3Jvb3RbYV1dLCBudW1bYV0pKTsKCQlhID0gcFtyb290W2FdXTsKCX0KCWlmKGRlcHRoW2FdID4gZGVwdGhbYl0pCgkJc3dhcChhLCBiKTsKCXJlcyA9IE1BWChyZXMsIHF1ZXJ5KDEsIDAsIG4tMSwgbnVtW2FdICsgMSwgbnVtW2JdKSk7CglyZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpCnsKCWludCB0OwoJc2NhbmYoIiVkIiwgJnQpOwoJd2hpbGUodC0tKQoJewoJCXNjYW5mKCIlZCIsICZuKTsKCQlmb3IoaW50IGk9MDtpPG4gLTE7KytpKQoJCXsKCQkJaW50IGEsIGIsIGM7CgkJCXNjYW5mKCIlZCAlZCAlZCIsICZhLCAmYiwgJmMpOyBhLS07IGItLTsKCQkJZ1thXS5wdXNoX2JhY2sobXAoYiwgbXAoYywgaSkgKSApOwoJCQlnW2JdLnB1c2hfYmFjayhtcChhLCBtcChjLCBpKSApICk7CgkJfQoJCWZvcihpbnQgaT0wO2k8bjsrK2kpCgkJCWhlYXZ5W2ldID0gLTE7CgkJYVswXSA9IDA7CgkJZGZzKDApOyBobGQoKTsgYnVpbGQoMSwgMCwgbi0xKTsKCQl3aGlsZSgxKQoJCXsKCQkJY2hhciBzWzEwXTsKCQkJc2NhbmYoIiVzIiwgcyk7CgkJCWlmKHNbMF0gPT0gJ0QnKWJyZWFrOwoJCQllbHNlIGlmKHNbMF0gPT0gJ0MnKQoJCQl7CgkJCQlpbnQgaSwgdGk7CgkJCQlzY2FuZigiJWQgJWQiLCAmaSwgJnRpKTsgaS0tOwoJCQkJdXBkYXRlKDEsIDAsIG4tMSwgbnVtW3Z0eFtpXV0sIHRpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWludCBhLCBiOwoJCQkJc2NhbmYoIiVkICVkIiwgJmEsICZiKTsgYS0tOyBiLS07CgkJCQlwcmludGYoIiVkXG4iLCBmaW5kKGEsIGIpKTsKCQkJfQoJCX0KCX0KCXJldHVybiAwOwp9