// LAT Le Anh Tuan
// CEAAURK
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define se second
#define fi first
#define MOD 1000000007
#define MAX 1000000000
using namespace std;
ll n, q, H, timerHLD, t;
ll dep[100005], par[100005];
ll head[100005], heavy[100005], pos[100005], sz[100005];
vector<ll> vec[100005];
struct seg{ll mx, mn, lazy;};
seg tree[200005];
struct Edge{ll u, v, w;};
vector<Edge> canh;
void build(ll u, ll p){
dep[u]=dep[p]+1;
par[u]=p;
sz[u]=1;
ll mx=0;
for(auto v:vec[u]){
if(v==p)continue;
build(v, u);
sz[u]+=sz[v];
if(sz[v]>mx)mx=sz[v], heavy[u]=v;
}
}
void buildHLD(ll u, ll h){
head[u]=h;
pos[u]=++timerHLD;
if(heavy[u])buildHLD(heavy[u], h);
for(auto v:vec[u]){
if(v==par[u] or v==heavy[u])continue;
buildHLD(v, v);
}
}
void apply(ll u, ll val){
auto [mx, mn, lazy]=tree[u];
if(val%2==1)tree[u].mx=-mn, tree[u].mn=-mx;
tree[u].lazy+=val;
}
void push(ll u){
if(u<=n){
apply(u*2, tree[u].lazy);
apply(u*2+1, tree[u].lazy);
}
tree[u].lazy=0;
}
void Tinh(ll u){for(ll i=H; i>=0; i--)push(u>>i);}
void Tinh2(ll u){
while(u>1){
u/=2;
tree[u].mx=max(tree[u*2].mx, tree[u*2+1].mx);
tree[u].mn=min(tree[u*2].mn, tree[u*2+1].mn);
}
}
void update(ll lk, ll rk, ll val){
lk+=n, rk+=n;
for(ll l=lk, r=rk; l<=r; l=(l+1)/2, r=(r-1)/2){
if(l==r)apply(l, val);
else{
if(l%2==1)apply(l, val);
if(r%2==0)apply(r, val);
}
}
Tinh(lk), Tinh(rk);
Tinh2(lk), Tinh2(rk);
}
void change(ll u, ll v, ll val){
if(par[v]==u)swap(u, v);
u=pos[u]+n;//cout<<u<<"\n";
Tinh(u);
Tinh2(u);
tree[u].mx=val, tree[u].mn=val;
Tinh(u);
Tinh2(u);
}
ll get(ll l, ll r){
l+=n, r+=n;
Tinh(l), Tinh(r);
ll ans=-MAX;
for(; l<=r; l=(l+1)/2, r=(r-1)/2){
if(l==r)ans=max(ans, tree[l].mx);
else{
if(l%2==1)ans=max(ans, tree[l].mx);
if(r%2==0)ans=max(ans, tree[r].mx);
}
}
return ans;
}
ll lcaget(ll u, ll v){
if(u==v)return 0;
ll ans=-MAX;
while(head[u]!=head[v]){
if(dep[head[u]]<dep[head[v]])swap(u, v);
ans=max(ans, get(pos[head[u]], pos[u]));
u=par[head[u]];
}
if(dep[u]<dep[v])swap(u, v);
ans=max(ans, get(pos[v]+1, pos[u]));
return ans;
}
void lcaupdate(ll u, ll v, ll val){
while(head[u]!=head[v]){//cout<<u<<" "<<head[u]<<" "<<v<<" "<<head[v]<<"\n";
if(dep[head[u]]<dep[head[v]])swap(u, v);
update(pos[head[u]], pos[u], val);
u=par[head[u]];
}
if(dep[u]<dep[v])swap(u, v);
update(pos[v]+1, pos[u], val);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen("Helloworld.inp", "r")){
freopen("Helloworld.inp", "r", stdin);
freopen("Helloworld.out", "w", stdout);
}
cin>>t;
while(t--){
cin>>n;
for(ll i=1; i<=2*n+1; i++)tree[i]={0, MAX, 0};
for(ll i=1; i<=n; i++)vec[i].clear();
for(ll i=1; i<=n; i++)heavy[i]=0;
canh.clear();
timerHLD=0;
H=__lg(n);
for(ll i=1, u, v, w; i<n; i++){
cin>>u>>v>>w;
vec[u].push_back(v);
vec[v].push_back(u);
canh.push_back({u, v, w});
}
build(1, 0);
buildHLD(1, 1);
for(auto [u, v, w]:canh)change(u, v, w);
string truy;
for(ll tv=1, i, u, v, val; 1; tv++){
cin>>truy;
if(truy=="CHANGE")cin>>i>>val, change(canh[i-1].u, canh[i-1].v, val);
if(truy=="NEGATE")cin>>u>>v, lcaupdate(u, v, 1);
if(truy=="QUERY")cin>>u>>v, cout<<lcaget(u, v)<<"\n";
if(truy=="DONE")break;
}
}
return 0;
}
Ly8gTEFUIExlIEFuaCBUdWFuCi8vIENFQUFVUksKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwojZGVmaW5lIE1BWCAxMDAwMDAwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBuLCBxLCBILCB0aW1lckhMRCwgdDsKbGwgZGVwWzEwMDAwNV0sIHBhclsxMDAwMDVdOwpsbCBoZWFkWzEwMDAwNV0sIGhlYXZ5WzEwMDAwNV0sIHBvc1sxMDAwMDVdLCBzelsxMDAwMDVdOwp2ZWN0b3I8bGw+IHZlY1sxMDAwMDVdOwpzdHJ1Y3Qgc2Vne2xsIG14LCBtbiwgbGF6eTt9OwpzZWcgdHJlZVsyMDAwMDVdOwpzdHJ1Y3QgRWRnZXtsbCB1LCB2LCB3O307CnZlY3RvcjxFZGdlPiBjYW5oOwoKdm9pZCBidWlsZChsbCB1LCBsbCBwKXsKICAgIGRlcFt1XT1kZXBbcF0rMTsKICAgIHBhclt1XT1wOwogICAgc3pbdV09MTsKCiAgICBsbCBteD0wOwogICAgZm9yKGF1dG8gdjp2ZWNbdV0pewogICAgICAgIGlmKHY9PXApY29udGludWU7CiAgICAgICAgYnVpbGQodiwgdSk7CiAgICAgICAgc3pbdV0rPXN6W3ZdOwogICAgICAgIGlmKHN6W3ZdPm14KW14PXN6W3ZdLCBoZWF2eVt1XT12OwogICAgfQp9Cgp2b2lkIGJ1aWxkSExEKGxsIHUsIGxsIGgpewogICAgaGVhZFt1XT1oOwogICAgcG9zW3VdPSsrdGltZXJITEQ7CiAgICBpZihoZWF2eVt1XSlidWlsZEhMRChoZWF2eVt1XSwgaCk7CiAgICBmb3IoYXV0byB2OnZlY1t1XSl7CiAgICAgICAgaWYodj09cGFyW3VdIG9yIHY9PWhlYXZ5W3VdKWNvbnRpbnVlOwogICAgICAgIGJ1aWxkSExEKHYsIHYpOwogICAgfQp9Cgp2b2lkIGFwcGx5KGxsIHUsIGxsIHZhbCl7CiAgICBhdXRvIFtteCwgbW4sIGxhenldPXRyZWVbdV07CiAgICBpZih2YWwlMj09MSl0cmVlW3VdLm14PS1tbiwgdHJlZVt1XS5tbj0tbXg7CiAgICB0cmVlW3VdLmxhenkrPXZhbDsKfQoKdm9pZCBwdXNoKGxsIHUpewogICAgaWYodTw9bil7CiAgICAgICAgYXBwbHkodSoyLCB0cmVlW3VdLmxhenkpOwogICAgICAgIGFwcGx5KHUqMisxLCB0cmVlW3VdLmxhenkpOwogICAgfQogICAgdHJlZVt1XS5sYXp5PTA7Cn0KCnZvaWQgVGluaChsbCB1KXtmb3IobGwgaT1IOyBpPj0wOyBpLS0pcHVzaCh1Pj5pKTt9Cgp2b2lkIFRpbmgyKGxsIHUpewogICAgd2hpbGUodT4xKXsKICAgICAgICB1Lz0yOwogICAgICAgIHRyZWVbdV0ubXg9bWF4KHRyZWVbdSoyXS5teCwgdHJlZVt1KjIrMV0ubXgpOwogICAgICAgIHRyZWVbdV0ubW49bWluKHRyZWVbdSoyXS5tbiwgdHJlZVt1KjIrMV0ubW4pOwogICAgfQp9Cgp2b2lkIHVwZGF0ZShsbCBsaywgbGwgcmssIGxsIHZhbCl7CiAgICBsays9biwgcmsrPW47CiAgICBmb3IobGwgbD1saywgcj1yazsgbDw9cjsgbD0obCsxKS8yLCByPShyLTEpLzIpewogICAgICAgIGlmKGw9PXIpYXBwbHkobCwgdmFsKTsKICAgICAgICBlbHNlewogICAgICAgICAgICBpZihsJTI9PTEpYXBwbHkobCwgdmFsKTsKICAgICAgICAgICAgaWYociUyPT0wKWFwcGx5KHIsIHZhbCk7CiAgICAgICAgfQogICAgfQogICAgVGluaChsayksIFRpbmgocmspOwogICAgVGluaDIobGspLCBUaW5oMihyayk7Cn0KCnZvaWQgY2hhbmdlKGxsIHUsIGxsIHYsIGxsIHZhbCl7CiAgICBpZihwYXJbdl09PXUpc3dhcCh1LCB2KTsKICAgIHU9cG9zW3VdK247Ly9jb3V0PDx1PDwiXG4iOwogICAgVGluaCh1KTsKICAgIFRpbmgyKHUpOwogICAgdHJlZVt1XS5teD12YWwsIHRyZWVbdV0ubW49dmFsOwogICAgVGluaCh1KTsKICAgIFRpbmgyKHUpOwp9CgpsbCBnZXQobGwgbCwgbGwgcil7CiAgICBsKz1uLCByKz1uOwogICAgVGluaChsKSwgVGluaChyKTsKICAgIGxsIGFucz0tTUFYOwogICAgZm9yKDsgbDw9cjsgbD0obCsxKS8yLCByPShyLTEpLzIpewogICAgICAgIGlmKGw9PXIpYW5zPW1heChhbnMsIHRyZWVbbF0ubXgpOwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmKGwlMj09MSlhbnM9bWF4KGFucywgdHJlZVtsXS5teCk7CiAgICAgICAgICAgIGlmKHIlMj09MClhbnM9bWF4KGFucywgdHJlZVtyXS5teCk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFuczsKfQoKbGwgbGNhZ2V0KGxsIHUsIGxsIHYpewogICAgaWYodT09dilyZXR1cm4gMDsKICAgIGxsIGFucz0tTUFYOwogICAgd2hpbGUoaGVhZFt1XSE9aGVhZFt2XSl7CiAgICAgICAgaWYoZGVwW2hlYWRbdV1dPGRlcFtoZWFkW3ZdXSlzd2FwKHUsIHYpOwogICAgICAgIGFucz1tYXgoYW5zLCBnZXQocG9zW2hlYWRbdV1dLCBwb3NbdV0pKTsKICAgICAgICB1PXBhcltoZWFkW3VdXTsKICAgIH0KCiAgICBpZihkZXBbdV08ZGVwW3ZdKXN3YXAodSwgdik7CiAgICBhbnM9bWF4KGFucywgZ2V0KHBvc1t2XSsxLCBwb3NbdV0pKTsKICAgIHJldHVybiBhbnM7Cn0KCnZvaWQgbGNhdXBkYXRlKGxsIHUsIGxsIHYsIGxsIHZhbCl7CiAgICB3aGlsZShoZWFkW3VdIT1oZWFkW3ZdKXsvL2NvdXQ8PHU8PCIgIjw8aGVhZFt1XTw8IiAiPDx2PDwiICI8PGhlYWRbdl08PCJcbiI7CiAgICAgICAgaWYoZGVwW2hlYWRbdV1dPGRlcFtoZWFkW3ZdXSlzd2FwKHUsIHYpOwogICAgICAgIHVwZGF0ZShwb3NbaGVhZFt1XV0sIHBvc1t1XSwgdmFsKTsKICAgICAgICB1PXBhcltoZWFkW3VdXTsKICAgIH0KCiAgICBpZihkZXBbdV08ZGVwW3ZdKXN3YXAodSwgdik7CiAgICB1cGRhdGUocG9zW3ZdKzEsIHBvc1t1XSwgdmFsKTsKfQoKCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgICAgICAgIGNvdXQudGllKDApOwogICAgaWYoZm9wZW4oIkhlbGxvd29ybGQuaW5wIiwgInIiKSl7CiAgICAgICAgZnJlb3BlbigiSGVsbG93b3JsZC5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJIZWxsb3dvcmxkLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4+PnQ7CiAgICB3aGlsZSh0LS0pewogICAgICAgIGNpbj4+bjsKICAgICAgICBmb3IobGwgaT0xOyBpPD0yKm4rMTsgaSsrKXRyZWVbaV09ezAsIE1BWCwgMH07CiAgICAgICAgZm9yKGxsIGk9MTsgaTw9bjsgaSsrKXZlY1tpXS5jbGVhcigpOwogICAgICAgIGZvcihsbCBpPTE7IGk8PW47IGkrKyloZWF2eVtpXT0wOwogICAgICAgIGNhbmguY2xlYXIoKTsKICAgICAgICB0aW1lckhMRD0wOwoKICAgICAgICBIPV9fbGcobik7CiAgICAgICAgZm9yKGxsIGk9MSwgdSwgdiwgdzsgaTxuOyBpKyspewogICAgICAgICAgICBjaW4+PnU+PnY+Pnc7CiAgICAgICAgICAgIHZlY1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgICAgIHZlY1t2XS5wdXNoX2JhY2sodSk7CiAgICAgICAgICAgIGNhbmgucHVzaF9iYWNrKHt1LCB2LCB3fSk7CiAgICAgICAgfQogICAgICAgIGJ1aWxkKDEsIDApOwogICAgICAgIGJ1aWxkSExEKDEsIDEpOwogICAgICAgIGZvcihhdXRvIFt1LCB2LCB3XTpjYW5oKWNoYW5nZSh1LCB2LCB3KTsKCiAgICAgICAgc3RyaW5nIHRydXk7CiAgICAgICAgZm9yKGxsIHR2PTEsIGksIHUsIHYsIHZhbDsgMTsgdHYrKyl7CiAgICAgICAgICAgIGNpbj4+dHJ1eTsKaWYodHJ1eT09IkNIQU5HRSIpY2luPj5pPj52YWwsIGNoYW5nZShjYW5oW2ktMV0udSwgY2FuaFtpLTFdLnYsIHZhbCk7CiAgICAgICAgICAgIGlmKHRydXk9PSJORUdBVEUiKWNpbj4+dT4+diwgbGNhdXBkYXRlKHUsIHYsIDEpOwogICAgICAgICAgICBpZih0cnV5PT0iUVVFUlkiKWNpbj4+dT4+diwgY291dDw8bGNhZ2V0KHUsIHYpPDwiXG4iOwogICAgICAgICAgICBpZih0cnV5PT0iRE9ORSIpYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==