#include<bits/stdc++.h>
using namespace std;
int n;
vector <pair<int,int> > mp[200005];
int fa[200005];
int dep[200005];
int siz[200005];
int hs[200005];
int tp[200005];
int dfn[200005],cnt=0;
pair<int,int> ed[200005];
int a[200005];
int da[200005];
void dfs1(int s,int f)
{
fa[s]=f;
dep[s]=dep[f]+1;
siz[s]=1;
for(int i=0;i<mp[s].size();i++)
{
int v=mp[s][i].first;
if(v==f) continue;
a[v]=mp[s][i].second;
dfs1(v,s);
siz[s]+=siz[v];
if(siz[hs[s]]<siz[v])
hs[s]=v;
}
}
void dfs2(int s,int t)
{
tp[s]=t;
dfn[s]=++cnt;
da[dfn[s]]=a[s];
if(hs[s])
dfs2(hs[s],t);
for(int i=0;i<mp[s].size();i++)
{
int v=mp[s][i].first;
if(v==fa[s]||v==hs[s])
continue;
dfs2(v,v);
}
}
struct Sgt
{
int l,r;
int sm;
int mx,mi;
bool lt;
}t[1000005];
void pushup(int p)
{
t[p].sm=t[p*2].sm+t[p*2+1].sm;
t[p].mx=max(t[p*2].mx,t[p*2+1].mx);
t[p].mi=min(t[p*2].mi,t[p*2+1].mi);
}
void pushdown(int p)
{
if(!t[p].lt) return;
t[p*2].sm=-t[p*2].sm;
swap(t[p*2].mx,t[p*2].mi);
t[p*2].mx=-t[p*2].mx;
t[p*2].mi=-t[p*2].mi;
t[p*2+1].sm=-t[p*2+1].sm;
swap(t[p*2+1].mx,t[p*2+1].mi);
t[p*2+1].mx=-t[p*2+1].mx;
t[p*2+1].mi=-t[p*2+1].mi;
t[p].lt=0;
t[p*2].lt=!t[p*2].lt;
t[p*2+1].lt=!t[p*2+1].lt;
}
void build(int l,int r,int p)
{
t[p].l=l; t[p].r=r;
t[p].lt=0;
if(l==r)
{
t[p].sm=t[p].mx=t[p].mi=da[l];
return;
}
int mid=(l+r)/2;
build(l,mid,p*2);
build(mid+1,r,p*2+1);
pushup(p);
}
void fan(int l,int r,int p)
{
if(t[p].l>=l&&t[p].r<=r)
{
t[p].sm=-t[p].sm;
swap(t[p].mx,t[p].mi);
t[p].mx=-t[p].mx;
t[p].mi=-t[p].mi;
t[p].lt=!t[p].lt;
return;
}
pushdown(p);
int mid=(t[p].l+t[p].r)/2;
if(l<=mid) fan(l,r,p*2);
if(r>=mid+1) fan(l,r,p*2+1);
pushup(p);
}
void change(int x,int k,int p)
{
if(t[p].l==t[p].r)
{
t[p].sm=t[p].mx=t[p].mi=k;
return;
}
pushdown(p);
int mid=(t[p].l+t[p].r)/2;
if(x<=mid) change(x,k,p*2);
else change(x,k,p*2+1);
pushup(p);
}
int quesum(int l,int r,int p)
{
if(t[p].l>=l&&t[p].r<=r)
return t[p].sm;
pushdown(p);
int mid=(t[p].l+t[p].r)/2;
int s=0;
if(l<=mid) s+=quesum(l,r,p*2);
if(r>=mid+1) s+=quesum(l,r,p*2+1);
return s;
}
int quemax(int l,int r,int p)
{
if(t[p].l>=l&&t[p].r<=r)
return t[p].mx;
pushdown(p);
int mid=(t[p].l+t[p].r)/2;
int m=-0x7fffffff;
if(l<=mid) m=max(m,quemax(l,r,p*2));
if(r>=mid+1) m=max(m,quemax(l,r,p*2+1));
return m;
}
int quemin(int l,int r,int p)
{
if(t[p].l>=l&&t[p].r<=r)
return t[p].mi;
pushdown(p);
int mid=(t[p].l+t[p].r)/2;
int m=0x7fffffff;
if(l<=mid) m=min(m,quemin(l,r,p*2));
if(r>=mid+1) m=min(m,quemin(l,r,p*2+1));
return m;
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
u++; v++;
mp[u].push_back(make_pair(v,w));
mp[v].push_back(make_pair(u,w));
ed[i]=make_pair(u,v);
}
dfs1(1,0);
dfs2(1,1);
build(1,n,1);
int m;
cin>>m;
while(m--)
{
string str;
int x,y;
cin>>str;
cin>>x>>y;
x++; y++;
if(str=="C")
{
x--; y--;
int lp=ed[x].first;
int rp=ed[x].second;
if(dep[lp]<dep[rp]) swap(lp,rp);
change(dfn[lp],y,1);
}
else if(str=="N")
{
while(tp[x]!=tp[y])
{
if(dep[tp[x]]<dep[tp[y]]) swap(x,y);
fan(dfn[tp[x]],dfn[x],1);
x=fa[tp[x]];
}
if(dfn[x]>dfn[y]) swap(x,y);
fan(dfn[x]+1,dfn[y],1);
}
else if(str=="SUM")
{
int s=0;
while(tp[x]!=tp[y])
{
if(dep[x]<dep[y]) swap(x,y);
s+=quesum(dfn[tp[x]],dfn[x],1);
x=fa[tp[x]];
}
if(dfn[x]>dfn[y]) swap(x,y);
s+=quesum(dfn[x]+1,dfn[y],1);
cout<<s<<endl;
}
else if(str=="MAX")
{
int s=-0x7fffffff;
while(tp[x]!=tp[y])
{
if(dep[x]<dep[y]) swap(x,y);
s=max(s,quemax(dfn[tp[x]],dfn[x],1));
x=fa[tp[x]];
}
if(dfn[x]>dfn[y]) swap(x,y);
s=max(s,quemax(dfn[x]+1,dfn[y],1));
cout<<s<<endl;
}
else if(str=="MIN")
{
int s=0x7fffffff;
while(tp[x]!=tp[y])
{
if(dep[x]<dep[y]) swap(x,y);
s=min(s,quemin(dfn[tp[x]],dfn[x],1));
x=fa[tp[x]];
}
if(dfn[x]>dfn[y]) swap(x,y);
s=min(s,quemin(dfn[x]+1,dfn[y],1));
cout<<s<<endl;
}
}
return 0;
}