#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define mp make_pair
const int N = 20000;
int n, heavy[N], root[N], p[N];
int 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 + 1] ? 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()
{
// freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
for(int i=0;i<n;++i) {
heavy[i] = -1;
g[i].clear();
}
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) ) );
}
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+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBYIGZpcnN0IAojZGVmaW5lIFkgc2Vjb25kIAojZGVmaW5lIG1wIG1ha2VfcGFpcgoKY29uc3QgaW50IE4gPSAyMDAwMDsKCmludCBuLCBoZWF2eVtOXSwgcm9vdFtOXSwgcFtOXTsKaW50IG51bVtOXSwgZGVwdGhbTl0sIHRbNipOXSwgYVtOXSwgYltOXSwgdnR4W05dOwoKdmVjdG9yPHBhaXI8aW50LCBwYWlyPGludCwgaW50PiA+ID4gZ1tOXTsKCmludCBkZnMoaW50IHYgPSAwLCBpbnQgcHJudCA9IC0xLCBpbnQgZCA9IDApCnsKCWludCBzaXplID0gMSwgTUFYc2l6ZSA9IDA7CglkZXB0aFt2XSA9IGQ7CglwW3ZdID0gcHJudDsKCWZvcihpbnQgaT0wO2k8Z1t2XS5zaXplKCk7KytpKQoJewoJCWludCB1ID0gZ1t2XVtpXS5YOwoJCWludCBjID0gZ1t2XVtpXS5ZLlggLCBpZHggPSBnW3ZdW2ldLlkuWTsKCQlpZih1ICE9IHBybnQpCgkJewoJCQlpbnQgc3Vic2l6ZSA9IGRmcyh1LCB2LCBkICsgMSk7CgkJCWlmKHN1YnNpemUgPiBNQVhzaXplKQoJCQl7CgkJCQlNQVhzaXplID0gc3Vic2l6ZTsKCQkJCWhlYXZ5W3ZdID0gdTsKCQkJfQoJCQl2dHhbaWR4XSA9IHU7CgkJCXNpemUgKz0gc3Vic2l6ZTsKCQkJYVt1XSA9IGM7CgkJfQoJfQoJcmV0dXJuIHNpemU7Cn0KCnZvaWQgaGxkKCkKewoJZm9yKGludCBpPTAsIGN1cnJwb3MgPSAwOyBpIDwgbjsgKytpKQoJCWlmKHBbaV0gPT0gLTEgfHwgaGVhdnlbcFtpXV0gIT0gaSkKCQkJZm9yKGludCBqID0gaTsgaiAhPSAtMTsgaiA9IGhlYXZ5W2pdKQoJCQl7CgkJCQlyb290W2pdID0gaTsKCQkJCW51bVtqXSA9IGN1cnJwb3M7IGJbY3VycnBvc10gPSBhW2pdOwoJCQkJY3VycnBvcysrOwoJCQl9Cn0KCnZvaWQgYnVpbGQoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCkKewoJaWYoc3RhcnQgPT0gZW5kKQoJewoJCXRbbm9kZV0gPSBiW3N0YXJ0XTsKCQlyZXR1cm4gOwoJfQoJaW50IG1pZCA9IChzdGFydCArIGVuZCkvMjsKCWJ1aWxkKDIqbm9kZSwgc3RhcnQsIG1pZCk7CglidWlsZCgyKm5vZGUgKyAxLCBtaWQgKyAxLCBlbmQpOwoJdFtub2RlXSA9IHRbMipub2RlXSA+IHRbMipub2RlICsgMV0gPyB0WzIqbm9kZV0gOiB0WzIqbm9kZSArIDFdOwp9CgppbnQgcXVlcnkoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGwsIGludCByKQp7CglpZihlbmQgPCBsIHx8IHN0YXJ0ID4gcikKCQlyZXR1cm4gMDsKCWlmKHN0YXJ0ID49IGwgJiYgZW5kIDw9IHIpCgkJcmV0dXJuIHRbbm9kZV07CglpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKS8yOwoJaW50IHAxID0gcXVlcnkoMipub2RlLCBzdGFydCwgbWlkLCBsLCByKTsKCWludCBwMiA9IHF1ZXJ5KDIqbm9kZSArIDEsIG1pZCArIDEsIGVuZCwgbCwgcik7CglyZXR1cm4gKHAxID4gcDIgPyBwMSA6IHAyKTsKfQoKdm9pZCB1cGRhdGUoaW50IG5vZGUsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGlkeCwgaW50IHZhbCkKewoJaWYoc3RhcnQgPT0gZW5kKQoJewoJCXRbbm9kZV0gPSBiW3N0YXJ0XSA9IHZhbDsKCQlyZXR1cm4gOwoJfQoJaW50IG1pZCA9IChzdGFydCArIGVuZCkvMjsKCWlmKGlkeCA8PSBtaWQpdXBkYXRlKDIqbm9kZSwgc3RhcnQsIG1pZCwgaWR4LCB2YWwpOwoJZWxzZSB1cGRhdGUoMipub2RlICsgMSwgbWlkICsgMSwgZW5kLCBpZHgsIHZhbCk7Cn0KCmludCBmaW5kKGludCBhLCBpbnQgYikKewoJaW50IHJlcyA9IDA7Cgl3aGlsZShyb290W2FdICE9IHJvb3RbYl0pCgl7CgkJaWYoZGVwdGhbcm9vdFthXV0gPCBkZXB0aFtyb290W2JdXSkKCQkJc3dhcChhLCBiKTsKCQlyZXMgPSBtYXgocmVzLCBxdWVyeSgxLCAwLCBuLTEsIG51bVtyb290W2FdXSwgbnVtW2FdKSk7CgkJYSA9IHBbcm9vdFthXV07Cgl9CglpZihkZXB0aFthXSA+IGRlcHRoW2JdKQoJCXN3YXAoYSwgYik7CglyZXMgPSBtYXgocmVzLCBxdWVyeSgxLCAwLCBuLTEsIG51bVthXSArIDEsIG51bVtiXSkpOwoJcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKQp7CgkvLyBmcmVvcGVuKCJpbi50eHQiLCAiciIsIHN0ZGluKTsKCglpbnQgdDsKCXNjYW5mKCIlZCIsICZ0KTsKCXdoaWxlKHQtLSkKCXsKCQlzY2FuZigiJWQiLCAmbik7CgkJZm9yKGludCBpPTA7aTxuOysraSkgewoJCQloZWF2eVtpXSA9IC0xOwoJCQlnW2ldLmNsZWFyKCk7CgkJfQoJCWZvcihpbnQgaT0wO2k8biAtMTsrK2kpCgkJewoJCQlpbnQgYSwgYiwgYzsKCQkJc2NhbmYoIiVkICVkICVkIiwgJmEsICZiLCAmYyk7IGEtLTsgYi0tOwoJCQlnW2FdLnB1c2hfYmFjayhtcChiLCBtcChjLCBpKSApICk7CgkJCWdbYl0ucHVzaF9iYWNrKG1wKGEsIG1wKGMsIGkpICkgKTsKCQl9CgkJYVswXSA9IDA7CgkJZGZzKDApOyBobGQoKTsgYnVpbGQoMSwgMCwgbi0xKTsKCgkJd2hpbGUoMSkKCQl7CgkJCWNoYXIgc1sxMF07CgkJCXNjYW5mKCIlcyIsIHMpOwoJCQlpZihzWzBdID09ICdEJylicmVhazsKCQkJZWxzZSBpZihzWzBdID09ICdDJykKCQkJewoJCQkJaW50IGksIHRpOwoJCQkJc2NhbmYoIiVkICVkIiwgJmksICZ0aSk7IGktLTsKCQkJCXVwZGF0ZSgxLCAwLCBuLTEsIG51bVt2dHhbaV1dLCB0aSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpbnQgYSwgYjsKCQkJCXNjYW5mKCIlZCAlZCIsICZhLCAmYik7IGEtLTsgYi0tOwoJCQkJcHJpbnRmKCIlZFxuIiwgZmluZChhLCBiKSk7CgkJCX0KCQl9Cgl9CglyZXR1cm4gMDsKfQ==