// God be praised
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
typedef pair<int, int> pii;
pii edges[N];
vector<pii> g[N];
int n;
int par[N], euler[2*N], in[N], sz[N], ieu, dep[N];
int dfs (int u, int pre, int lvl) {
in[u] = ieu;
euler[ieu++] = u;
sz[u] = 1;
dep[u] = lvl;
par[u] = pre;
for (auto &p : g[u]) {
int v = p.first;
if (v == pre) continue;
sz[u] += dfs(v, u, lvl+1);
euler[ieu++] = u;
}
return sz[u];
}
int LCA[15][1<<15];
int min_dep(int u, int v) {
return (dep[u] < dep[v]) ? u : v;
}
void lca_build () {
int n = 1;
while (n < ieu) n <<= 1;
int range, half;
for (int h = 1; (range = 1 << h) <= n; h++) {
half = range >> 1;
for (int i = half; i < n; i += range) {
LCA[h][i-1] = euler[i-1];
for (int j = i - 2; j >= i - half; j--) {
LCA[h][j] = min_dep(LCA[h][j + 1], euler[j]);
}
LCA[h][i] = euler[i];
for (int j = i + 1; j < i + half; j++) {
LCA[h][j] = min_dep(LCA[h][j - 1], euler[j]);
}
}
}
}
int lca_query (int ql, int qr) {
if (ql == qr) {
return euler[ql];
}
int h = 32 - __builtin_clz(ql ^ qr);
return min_dep(LCA[h][ql], LCA[h][qr]);
}
int chain[N], ichain, ord[N], iord, head[N], ordw[N], st[4*N];
void hld_dfs (int u, int pre, int w) {
iord++;
ord[u] = iord;
ordw[iord] = w;
int heavy = -1, weight;
for (auto &p : g[u]) {
int v = p.first;
int vw = p.second;
if (v == pre) continue;
if (heavy == -1 || sz[heavy] < sz[v]) {
heavy = v;
weight = vw;
}
}
if (heavy != -1) {
chain[heavy] = chain[u];
hld_dfs(heavy, u, weight);
}
for (auto &p : g[u]) {
int v = p.first;
int vw = p.second;
if (v == pre) continue;
if (v != heavy) {
ichain++;
chain[v] = ichain;
head[ichain] = v;
hld_dfs(v, u, vw);
}
}
}
int hld_build (int i, int nl, int nr) {
if (nl == nr) {
return st[i] = ordw[nl];
}
int mid = (nl + nr) / 2;
return st[i] = max(
hld_build(i+i, nl, mid),
hld_build(i+i+1, mid+1, nr)
);
}
int hld_update (int i, int nl, int nr, int o, int w) {
if (nl > o || nr < o) return st[i];
if (nl == nr) return st[i] = w;
int mid = (nl + nr) / 2;
return st[i] = max(
hld_update(i+i, nl, mid, o, w),
hld_update(i+i+1, mid+1, nr, o, w)
);
}
int hld_query (int i, int nl, int nr, int ql, int qr) {
if (nl > qr || ql > nr) return INT_MIN;
if (nl >= ql && nr <= qr) return st[i];
int mid = (nl + nr) / 2;
return max(
hld_query(i+i, nl, mid, ql, qr),
hld_query(i+i+1, mid+1, nr, ql, qr)
);
}
int hld_find (int u, int v) {
if (u == v) {
return INT_MIN;
}
if (chain[u] == chain[v]) {
return hld_query(1, 1, n, ord[u]+1, ord[v]);
}
return max(
hld_query(1, 1, n, ord[head[chain[v]]], ord[v]),
hld_find(u, par[head[chain[v]]])
);
}
char action[20];
void change () {
int e, w;
scanf("%d %d", &e, &w);
int u, v; tie(u, v) = edges[e];
int o = (par[u] == v) ? u : v;
hld_update(1, 1, n, ord[o], w);
}
void query () {
int u, v;
scanf("%d %d", &u, &v);
if (in[u] > in[v]) swap(u, v);
int lca = lca_query(in[u], in[v]);
int ans = max(hld_find(lca, u), hld_find(lca, v));
printf("%d\n", ans);
}
int main () {
// freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
dep[0] = INT_MAX;
memset(euler, 0, sizeof euler);
for (int i = 1; i <= n; i++) {
g[i].clear();
}
for (int i = 1, u, v, w; i < n; i++) {
scanf("%d %d %d", &u, &v, &w);
g[u].emplace_back(v, w);
g[v].emplace_back(u, w);
edges[i] = { u, v };
}
ieu = 0;
dfs(1, 0, 1);
lca_build();
head[0] = 1;
chain[1] = ichain = 0;
iord = 0;
hld_dfs(1, -1, INT_MIN);
hld_build(1, 1, iord);
while (true) {
scanf("%s", action);
if (*action == 'D'/*DONE*/) break;
if (*action == 'C'/*CHANGE*/) change();
if (*action == 'Q'/*QUERY*/) query();
}
}
return 0;
}
Ly8gR29kIGJlIHByYWlzZWQKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlNCArIDU7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwpwaWkgZWRnZXNbTl07CnZlY3RvcjxwaWk+IGdbTl07CmludCBuOwoKaW50IHBhcltOXSwgZXVsZXJbMipOXSwgaW5bTl0sIHN6W05dLCBpZXUsIGRlcFtOXTsKCmludCBkZnMgKGludCB1LCBpbnQgcHJlLCBpbnQgbHZsKSB7Cglpblt1XSA9IGlldTsKCWV1bGVyW2lldSsrXSA9IHU7Cglzelt1XSA9IDE7CglkZXBbdV0gPSBsdmw7CglwYXJbdV0gPSBwcmU7CgoJZm9yIChhdXRvICZwIDogZ1t1XSkgewoJCWludCB2ID0gcC5maXJzdDsKCQkKCQlpZiAodiA9PSBwcmUpIGNvbnRpbnVlOwoJCXN6W3VdICs9IGRmcyh2LCB1LCBsdmwrMSk7CgkJZXVsZXJbaWV1KytdID0gdTsKCX0KCglyZXR1cm4gc3pbdV07Cn0KCmludCBMQ0FbMTVdWzE8PDE1XTsKCmludCBtaW5fZGVwKGludCB1LCBpbnQgdikgewoJcmV0dXJuIChkZXBbdV0gPCBkZXBbdl0pID8gdSA6IHY7Cn0KCnZvaWQgbGNhX2J1aWxkICgpIHsKCWludCBuID0gMTsKCXdoaWxlIChuIDwgaWV1KSBuIDw8PSAxOwoJCglpbnQgcmFuZ2UsIGhhbGY7Cglmb3IgKGludCBoID0gMTsgKHJhbmdlID0gMSA8PCBoKSA8PSBuOyBoKyspIHsKCQloYWxmID0gcmFuZ2UgPj4gMTsKCgkJZm9yIChpbnQgaSA9IGhhbGY7IGkgPCBuOyBpICs9IHJhbmdlKSB7CgkJCUxDQVtoXVtpLTFdID0gZXVsZXJbaS0xXTsKCQkJZm9yIChpbnQgaiA9IGkgLSAyOyBqID49IGkgLSBoYWxmOyBqLS0pIHsKCQkJCUxDQVtoXVtqXSA9IG1pbl9kZXAoTENBW2hdW2ogKyAxXSwgZXVsZXJbal0pOwoJCQl9CgoJCQlMQ0FbaF1baV0gPSBldWxlcltpXTsKCQkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgaSArIGhhbGY7IGorKykgewoJCQkJTENBW2hdW2pdID0gbWluX2RlcChMQ0FbaF1baiAtIDFdLCBldWxlcltqXSk7CgkJCX0KCQl9Cgl9Cn0KCmludCBsY2FfcXVlcnkgKGludCBxbCwgaW50IHFyKSB7CglpZiAocWwgPT0gcXIpIHsKCQlyZXR1cm4gZXVsZXJbcWxdOwoJfQoJCglpbnQgaCA9IDMyIC0gX19idWlsdGluX2NseihxbCBeIHFyKTsKCXJldHVybiBtaW5fZGVwKExDQVtoXVtxbF0sIExDQVtoXVtxcl0pOwp9CgppbnQgY2hhaW5bTl0sIGljaGFpbiwgb3JkW05dLCBpb3JkLCBoZWFkW05dLCBvcmR3W05dLCBzdFs0Kk5dOwoKdm9pZCBobGRfZGZzIChpbnQgdSwgaW50IHByZSwgaW50IHcpIHsKCWlvcmQrKzsKCW9yZFt1XSA9IGlvcmQ7CglvcmR3W2lvcmRdID0gdzsKCglpbnQgaGVhdnkgPSAtMSwgd2VpZ2h0OwoJZm9yIChhdXRvICZwIDogZ1t1XSkgewoJCWludCB2ID0gcC5maXJzdDsKCQlpbnQgdncgPSBwLnNlY29uZDsKCQlpZiAodiA9PSBwcmUpIGNvbnRpbnVlOwoKCQlpZiAoaGVhdnkgPT0gLTEgfHwgc3pbaGVhdnldIDwgc3pbdl0pIHsKCQkJaGVhdnkgPSB2OwoJCQl3ZWlnaHQgPSB2dzsKCQl9Cgl9CgkKCWlmIChoZWF2eSAhPSAtMSkgewoJCWNoYWluW2hlYXZ5XSA9IGNoYWluW3VdOwoJCWhsZF9kZnMoaGVhdnksIHUsIHdlaWdodCk7Cgl9CgoJZm9yIChhdXRvICZwIDogZ1t1XSkgewoJCWludCB2ID0gcC5maXJzdDsKCQlpbnQgdncgPSBwLnNlY29uZDsKCQlpZiAodiA9PSBwcmUpIGNvbnRpbnVlOwoKCQlpZiAodiAhPSBoZWF2eSkgewoJCQlpY2hhaW4rKzsKCQkJY2hhaW5bdl0gPSBpY2hhaW47CgkJCWhlYWRbaWNoYWluXSA9IHY7CgoJCQlobGRfZGZzKHYsIHUsIHZ3KTsKCQl9Cgl9Cn0KCmludCBobGRfYnVpbGQgKGludCBpLCBpbnQgbmwsIGludCBucikgewoJaWYgKG5sID09IG5yKSB7CgkJcmV0dXJuIHN0W2ldID0gb3Jkd1tubF07Cgl9CgoJaW50IG1pZCA9IChubCArIG5yKSAvIDI7CglyZXR1cm4gc3RbaV0gPSBtYXgoCgkJaGxkX2J1aWxkKGkraSwgbmwsIG1pZCksCgkJaGxkX2J1aWxkKGkraSsxLCBtaWQrMSwgbnIpCgkpOwp9CgppbnQgaGxkX3VwZGF0ZSAoaW50IGksIGludCBubCwgaW50IG5yLCBpbnQgbywgaW50IHcpIHsKCWlmIChubCA+IG8gfHwgbnIgPCBvKSByZXR1cm4gc3RbaV07CgoJaWYgKG5sID09IG5yKSByZXR1cm4gc3RbaV0gPSB3OwoKCWludCBtaWQgPSAobmwgKyBucikgLyAyOwoJcmV0dXJuIHN0W2ldID0gbWF4KAoJCWhsZF91cGRhdGUoaStpLCBubCwgbWlkLCBvLCB3KSwKCQlobGRfdXBkYXRlKGkraSsxLCBtaWQrMSwgbnIsIG8sIHcpCgkpOwp9CgppbnQgaGxkX3F1ZXJ5IChpbnQgaSwgaW50IG5sLCBpbnQgbnIsIGludCBxbCwgaW50IHFyKSB7CglpZiAobmwgPiBxciB8fCBxbCA+IG5yKSByZXR1cm4gSU5UX01JTjsKCglpZiAobmwgPj0gcWwgJiYgbnIgPD0gcXIpIHJldHVybiBzdFtpXTsKCglpbnQgbWlkID0gKG5sICsgbnIpIC8gMjsKCXJldHVybiBtYXgoCgkJaGxkX3F1ZXJ5KGkraSwgbmwsIG1pZCwgcWwsIHFyKSwKCQlobGRfcXVlcnkoaStpKzEsIG1pZCsxLCBuciwgcWwsIHFyKQoJKTsKfQoKaW50IGhsZF9maW5kIChpbnQgdSwgaW50IHYpIHsKCWlmICh1ID09IHYpIHsKCQlyZXR1cm4gSU5UX01JTjsKCX0KCWlmIChjaGFpblt1XSA9PSBjaGFpblt2XSkgewoJCXJldHVybiBobGRfcXVlcnkoMSwgMSwgbiwgb3JkW3VdKzEsIG9yZFt2XSk7Cgl9CglyZXR1cm4gbWF4KAoJCWhsZF9xdWVyeSgxLCAxLCBuLCBvcmRbaGVhZFtjaGFpblt2XV1dLCBvcmRbdl0pLAoJCWhsZF9maW5kKHUsIHBhcltoZWFkW2NoYWluW3ZdXV0pCgkpOwp9CgpjaGFyIGFjdGlvblsyMF07Cgp2b2lkIGNoYW5nZSAoKSB7CglpbnQgZSwgdzsKCXNjYW5mKCIlZCAlZCIsICZlLCAmdyk7CgoJaW50IHUsIHY7IHRpZSh1LCB2KSA9IGVkZ2VzW2VdOwoJaW50IG8gPSAocGFyW3VdID09IHYpID8gdSA6IHY7CglobGRfdXBkYXRlKDEsIDEsIG4sIG9yZFtvXSwgdyk7Cn0KCnZvaWQgcXVlcnkgKCkgewoJaW50IHUsIHY7CglzY2FuZigiJWQgJWQiLCAmdSwgJnYpOwoKCWlmIChpblt1XSA+IGluW3ZdKSBzd2FwKHUsIHYpOwoJaW50IGxjYSA9IGxjYV9xdWVyeShpblt1XSwgaW5bdl0pOwoKCWludCBhbnMgPSBtYXgoaGxkX2ZpbmQobGNhLCB1KSwgaGxkX2ZpbmQobGNhLCB2KSk7CglwcmludGYoIiVkXG4iLCBhbnMpOwp9CgppbnQgbWFpbiAoKSB7CgkvLyBmcmVvcGVuKCJpbi50eHQiLCAiciIsIHN0ZGluKTsKCglpbnQgdDsKCXNjYW5mKCIlZCIsICZ0KTsKCgl3aGlsZSAodC0tKSB7CgkJc2NhbmYoIiVkIiwgJm4pOwoJCQoJCWRlcFswXSA9IElOVF9NQVg7CgkJbWVtc2V0KGV1bGVyLCAwLCBzaXplb2YgZXVsZXIpOwoJCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCQlnW2ldLmNsZWFyKCk7CgkJfQoKCQlmb3IgKGludCBpID0gMSwgdSwgdiwgdzsgaSA8IG47IGkrKykgewoJCQlzY2FuZigiJWQgJWQgJWQiLCAmdSwgJnYsICZ3KTsKCQkJZ1t1XS5lbXBsYWNlX2JhY2sodiwgdyk7CgkJCWdbdl0uZW1wbGFjZV9iYWNrKHUsIHcpOwoJCQllZGdlc1tpXSA9IHsgdSwgdiB9OwoJCX0KCgkJaWV1ID0gMDsKCQlkZnMoMSwgMCwgMSk7CgkJbGNhX2J1aWxkKCk7CgoJCWhlYWRbMF0gPSAxOwoJCWNoYWluWzFdID0gaWNoYWluID0gMDsKCgkJaW9yZCA9IDA7CgkJaGxkX2RmcygxLCAtMSwgSU5UX01JTik7CgkJaGxkX2J1aWxkKDEsIDEsIGlvcmQpOwoKCQl3aGlsZSAodHJ1ZSkgewoJCQlzY2FuZigiJXMiLCBhY3Rpb24pOwoJCQlpZiAoKmFjdGlvbiA9PSAnRCcvKkRPTkUqLykgYnJlYWs7CgkJCWlmICgqYWN0aW9uID09ICdDJy8qQ0hBTkdFKi8pIGNoYW5nZSgpOwoJCQlpZiAoKmFjdGlvbiA9PSAnUScvKlFVRVJZKi8pIHF1ZXJ5KCk7CgkJfQoJfQoKCXJldHVybiAwOwp9