rt.
#include<bits/stdc++.h>
#define int long long
#define rep(i,l,r) for(int i=(l),i##end=(r);i<=i##end;++i)
#define per(i,r,l) for(int i=(r),i##end=(l);i>=i##end;--i)
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int maxn=1e5+10,maxm=1e6+10,mod=998244353;
int n,q,idtt,eu[maxn],ev[maxn],ew[maxn],dep[maxn],sz[maxn],fa[maxn],hs[maxn],lt[maxn],id[maxn];
int val[maxn],tmp[maxn],tn[maxn<<2],mx[maxn<<2],mn[maxn<<2],sm[maxn<<2];
vector<pii> e[maxn];
void dfs1(int u){
sz[u]=1;
for(auto &[v,w]:e[u]) if(v!=fa[u]){
fa[v]=u,val[v]=w,dep[v]=dep[u]+1,dfs1(v),sz[u]+=sz[v];
if(sz[v]>sz[hs[u]]) hs[u]=v;
}
}
void dfs2(int u){
if(!lt[u]) lt[u]=u;
lt[hs[u]]=lt[u],tmp[id[u]=++idtt]=val[u];
if(hs[u]) dfs2(hs[u]);
for(auto &[v,w]:e[u]) if(v!=fa[u]&&v!=hs[u]) dfs2(v);
}
inline void down(int id){
if(tn[id])
swap(mx[id],mn[id]),mx[id]=-mx[id],mn[id]=-mn[id],sm[id]=-sm[id],
tn[id<<1]^=1,tn[id<<1|1]^=1,tn[id]=0;
}
inline void pushup(int id){
down(id<<1),down(id<<1|1),mx[id]=max(mx[id<<1],mx[id<<1|1]),
mx[id]=min(mx[id<<1],mx[id<<1|1]),sm[id]=sm[id<<1]+sm[id<<1|1];}
void build(int id,int l,int r,int *tmp){
if(l==r){
mx[id]=mn[id]=sm[id]=tmp[l];
return;
}
int mid=l+r>>1;
build(id<<1,l,mid,tmp),build(id<<1|1,mid+1,r,tmp),pushup(id);
}
void change(int id,int l,int r,int k,int x){
down(id);
if(l==r){
mx[id]=mn[id]=sm[id]=x;
return;
}
int mid=l+r>>1;
if(k<=mid) change(id<<1,l,mid,k,x);
else change(id<<1|1,mid+1,r,k,x);
pushup(id);
}
void mk(int id,int l,int r,int lq,int rq){
down(id);
if(lq<=l&&r<=rq){
tn[id]^=1;
return;
}
int mid=l+r>>1;
if(lq<=mid) mk(id<<1,l,mid,lq,rq);
if(rq>mid) mk(id<<1|1,mid+1,r,lq,rq);
pushup(id);
}
int sum(int id,int l,int r,int lq,int rq){
down(id);
if(lq<=l&&r<=rq) return mx[id];
int mid=l+r>>1,ans=0;
if(lq<=mid) ans+=sum(id<<1,l,mid,lq,rq);
if(rq>mid) ans+=sum(id<<1|1,mid+1,r,lq,rq);
return ans;
}
int qmax(int id,int l,int r,int lq,int rq){
down(id);
if(lq<=l&&r<=rq) return mx[id];
int mid=l+r>>1,ans=INT_MIN;
if(lq<=mid) ans=max(ans,qmax(id<<1,l,mid,lq,rq));
if(rq>mid) ans=max(ans,qmax(id<<1|1,mid+1,r,lq,rq));
return ans;
}
int qmin(int id,int l,int r,int lq,int rq){
down(id);
if(lq<=l&&r<=rq) return mx[id];
int mid=l+r>>1,ans=INT_MAX;
if(lq<=mid) ans=min(ans,qmin(id<<1,l,mid,lq,rq));
if(rq>mid) ans=min(ans,qmin(id<<1|1,mid+1,r,lq,rq));
return ans;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
rep(i,1,n-1){
cin>>eu[i]>>ev[i]>>ew[i];
e[eu[i]].push_back({ev[i],ew[i]}),e[ev[i]].push_back({eu[i],ew[i]});
}
dfs1(1),dfs2(1),build(1,1,n,tmp),cin>>q;
rep(o,1,q){
int u,v,k,w,ans;
string opt;
cin>>opt;
if(opt=="SUM") ans=0;
if(opt=="MAX") ans=-1e3;
if(opt=="MIN") ans=1e3;
if(opt=="C"){
cin>>k>>w,u=eu[k],v=ev[k];
if(dep[u]<dep[v]) swap(u,v);
change(1,1,n,id[u],w);
continue;
}
cin>>u>>v;
for(;lt[u]!=lt[v];u=fa[lt[u]]){
if(dep[lt[u]]<dep[lt[v]]) swap(u,v);
if(opt=="N") mk(1,1,n,id[lt[u]],id[u]);
if(opt=="SUM") ans+=sum(1,1,n,id[lt[u]],id[u]);
if(opt=="MAX") ans=max(ans,qmax(1,1,n,id[lt[u]],id[u]));
if(opt=="MIN") ans=min(ans,qmin(1,1,n,id[lt[u]],id[u]));
}
if(id[u]>id[v]) swap(u,v);
if(u!=v) if(opt=="N") mk(1,1,n,id[u]+1,id[v]);
if(opt=="SUM") ans+=sum(1,1,n,id[u]+1,id[v]);
if(opt=="MAX") ans=max(ans,qmax(1,1,n,id[u]+1,id[v]));
if(opt=="MIN") ans=min(ans,qmin(1,1,n,id[u]+1,id[v]));
if(opt!="N") cout<<ans<<'\n';
}
return 0;
}