#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MAX=1e7;
ll eindx;
ll et[20005],d[20005],h[10005];
list<ll>l[10005];
void euler(ll s,ll p,ll dep)
{
et[eindx]=s;
d[eindx]=dep;
h[s]=eindx++;
for(auto it=l[s].begin();it!=l[s].end();it++)
{
if(*it==p)
continue;
euler(*it,s,dep+1);
et[eindx]=s;
d[eindx++]=dep;
}
}
pair<ll,ll>seg[80005];
void builds(ll s,ll e,ll p)
{
if(s==e)
{
seg[p]=make_pair(d[s],s);
return;
}
ll mid=(s+e)/2;
builds(s,mid,2*p+1);
builds(mid+1,e,2*p+2);
seg[p]=seg[2*p+1].first<seg[2*p+2].first?seg[2*p+1]:seg[2*p+2];
}
pair<ll,ll> querrys(ll s,ll e,ll p,ll ql,ll qh)
{
if(s>qh||e<ql)
return make_pair(MAX,0);
if(s>=ql&&e<=qh)
return seg[p];
ll mid=(s+e)/2;
pair<ll,ll>p1= querrys(s,mid,2*p+1,ql,qh);
pair<ll,ll>p2=querrys(mid+1,e,2*p+2,ql,qh);
pair<ll,ll>p3=p1.first<p2.first?p1:p2;
return p3;
}
ll getlca(ll u,ll v)
{
ll u1=min(h[u],h[v]);
ll u2=max(h[u],h[v]);
return et[querrys(0,eindx-1,0,u1,u2).second];
}
struct node
{
ll data,par,size,depth;
ll segpos,chain;
ll chainpos;
}vtx[10005];
ll cindx,pos,spos;
ll head[1001];
ll b[10005];//seg aaray for hld
void dfs(ll s,ll p,ll dep)
{
vtx[s].par=p;
vtx[s].depth=dep;
vtx[s].size=1;
for(auto it=l[s].begin();it!=l[s].end();it++)
{
if(*it==p)
continue;
dfs(*it,s,dep+1);
vtx[s].size+=vtx[*it].size;
}
}
void hld(ll s,ll p)
{
if(head[cindx]==-1)
head[cindx]=s;
vtx[s].chain=cindx;
vtx[s].chainpos=pos;
vtx[s].segpos=spos;
b[spos++]=vtx[s].data;
ll special=-1,ssize=0;
for(auto it=l[s].begin();it!=l[s].end();it++)
{
if(*it==p)
continue;
if(vtx[*it].size>ssize)
{
ssize=vtx[*it].size;
special=*it;
}
}
if(special!=-1)
{
pos++;
hld(special,s);
}
for(auto it=l[s].begin();it!=l[s].end();it++)
{
if((*it==p)||(*it==special))
continue;
pos=1;
cindx++;
hld(*it,s);
}
}
ll segt[40005];
void build(ll s,ll e,ll p)
{
if(s==e)
{
segt[p]=b[s];
return;
}
ll mid=(s+e)/2;
build(s,mid,2*p+1);
build(mid+1,e,2*p+2);
segt[p]=segt[2*p+1]+segt[2*p+2];
}
ll querry(ll s,ll e,ll p,ll ql,ll qh)
{
if(s>e)
return 0;
if(s>qh||e<ql)
return 0;
if(s>=ql&&e<=qh)
return segt[p];
ll mid=(s+e)/2;
ll u=querry(s,mid,2*p+1,ql,qh);
ll v=querry(mid+1,e,2*p+2,ql,qh);
return u+v;
}
ll getans(ll u,ll v)
{
ll c1,c2,sum=0;
c2=vtx[v].chain;
while(1)
{
c1=vtx[u].chain;
if(u==v)
return sum;
if(c1==c2)
{
sum+=querry(0,spos-1,0,vtx[v].segpos+1,vtx[u].segpos);
return sum;
}
ll p=head[vtx[u].chain];
if(p==u)
{
sum+=querry(0,spos-1,0,vtx[p].segpos,vtx[u].segpos);
u=vtx[p].par;
}
else{
sum+=querry(0,spos-1,0,vtx[p].segpos+1,vtx[u].segpos);
u=p;}
}
}
ll solve1(ll x,ll y)
{
ll lca=getlca(x,y);
ll u=getans(x,lca);
ll v=getans(y,lca);
return v+u;
}
ll extract(ll u,ll v,ll k,ll p)
{
ll count=p;
while(1)
{
ll u1=vtx[u].chainpos;
if(count-u1<=k)
{
while(count>k)
{
count--;
u=vtx[u].par;
}
return u;
}
else
{
count-=u1;
u=vtx[head[vtx[u].chain]].par;
}
}
}
ll getkth(ll x,ll y,ll k)
{
ll lca=getlca(x,y);
ll u1=vtx[x].depth-vtx[lca].depth+1;
if(u1>=k)// ans lies in subtree containing x
return extract(x,lca,u1-k+1,u1);
else//ans lies in subtree containing y
{
ll u2=vtx[y].depth-vtx[lca].depth+1;
return extract(y,lca,k-u1+1,u2);
}
}
struct edge
{
ll vrtx,cost;
};
list<edge>l1[10005];
void efs(ll s,ll p,ll c)
{
vtx[s].data=c;
for(auto it=l1[s].begin();it!=l1[s].end();it++)
{
if(it->vrtx==p)
continue;
efs(it->vrtx,s,it->cost);
}
}
int main()
{
ll t,n,i,x,y,z;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
for(i=0;i<10005;i++){
l[i].clear();
l1[i].clear();}
for(i=1;i<n;i++)
{
scanf("%lld%lld%lld",&x,&y,&z);
x--;
y--;
l[x].push_back(y);
l[y].push_back(x);
edge k1;
k1.vrtx=y;
k1.cost=z;
l1[x].push_back(k1);
k1.vrtx=x;
l1[y].push_back(k1);
}
efs(0,-1,0);
eindx=0;
euler(0,-1,1);
for(i=0;i<80005;i++)
seg[i]=make_pair(MAX,0);
builds(0,eindx-1,0);
cindx=0;
pos=1;
spos=0;
memset(head,-1,sizeof(head));
memset(segt,0,sizeof(segt));
dfs(0,-1,1);
hld(0,-1);
build(0,spos-1,0);
char str[10];
while(1)
{
scanf("%s",str);
if(strcmp(str,"DONE")==0)
break;
if(strcmp(str,"DIST")==0)
{
scanf("%lld%lld",&x,&y);
x--;
y--;
printf("%lld\n",solve1(x,y));
}
else
{
scanf("%lld%lld%lld",&x,&y,&z);
x--;
y--;
ll u=getkth(x,y,z);
printf("%lld\n",u+1);
}
}
printf("\n");
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGxsIE1BWD0xZTc7CmxsIGVpbmR4OwpsbCBldFsyMDAwNV0sZFsyMDAwNV0saFsxMDAwNV07Cmxpc3Q8bGw+bFsxMDAwNV07CnZvaWQgZXVsZXIobGwgcyxsbCBwLGxsIGRlcCkKewogICAgZXRbZWluZHhdPXM7CiAgICBkW2VpbmR4XT1kZXA7CiAgICBoW3NdPWVpbmR4Kys7CiAgICBmb3IoYXV0byBpdD1sW3NdLmJlZ2luKCk7aXQhPWxbc10uZW5kKCk7aXQrKykKICAgIHsKICAgICAgICBpZigqaXQ9PXApCiAgICAgICAgY29udGludWU7CiAgICAgICAgZXVsZXIoKml0LHMsZGVwKzEpOwogICAgICAgIGV0W2VpbmR4XT1zOwogICAgICAgIGRbZWluZHgrK109ZGVwOwogICAgfQp9CnBhaXI8bGwsbGw+c2VnWzgwMDA1XTsKdm9pZCBidWlsZHMobGwgcyxsbCBlLGxsIHApCnsKICAgIGlmKHM9PWUpCiAgICB7CiAgICAgICAgc2VnW3BdPW1ha2VfcGFpcihkW3NdLHMpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGxsIG1pZD0ocytlKS8yOwogICAgYnVpbGRzKHMsbWlkLDIqcCsxKTsKICAgIGJ1aWxkcyhtaWQrMSxlLDIqcCsyKTsKICAgIHNlZ1twXT1zZWdbMipwKzFdLmZpcnN0PHNlZ1syKnArMl0uZmlyc3Q/c2VnWzIqcCsxXTpzZWdbMipwKzJdOwp9CnBhaXI8bGwsbGw+IHF1ZXJyeXMobGwgcyxsbCBlLGxsIHAsbGwgcWwsbGwgcWgpCnsKICAgIGlmKHM+cWh8fGU8cWwpCiAgICByZXR1cm4gbWFrZV9wYWlyKE1BWCwwKTsKICAgIGlmKHM+PXFsJiZlPD1xaCkKICAgIHJldHVybiBzZWdbcF07CiAgICBsbCBtaWQ9KHMrZSkvMjsKICAgIHBhaXI8bGwsbGw+cDE9IHF1ZXJyeXMocyxtaWQsMipwKzEscWwscWgpOwogICAgcGFpcjxsbCxsbD5wMj1xdWVycnlzKG1pZCsxLGUsMipwKzIscWwscWgpOwogICAgcGFpcjxsbCxsbD5wMz1wMS5maXJzdDxwMi5maXJzdD9wMTpwMjsKICAgIHJldHVybiBwMzsKfQpsbCBnZXRsY2EobGwgdSxsbCB2KQp7CiAgICBsbCB1MT1taW4oaFt1XSxoW3ZdKTsKICAgIGxsIHUyPW1heChoW3VdLGhbdl0pOwogICAgcmV0dXJuIGV0W3F1ZXJyeXMoMCxlaW5keC0xLDAsdTEsdTIpLnNlY29uZF07Cn0Kc3RydWN0IG5vZGUKewogICAgbGwgZGF0YSxwYXIsc2l6ZSxkZXB0aDsKICAgIGxsIHNlZ3BvcyxjaGFpbjsKICAgIGxsIGNoYWlucG9zOwp9dnR4WzEwMDA1XTsKbGwgY2luZHgscG9zLHNwb3M7CmxsIGhlYWRbMTAwMV07CmxsIGJbMTAwMDVdOy8vc2VnIGFhcmF5IGZvciBobGQKdm9pZCBkZnMobGwgcyxsbCBwLGxsIGRlcCkKewogICAgdnR4W3NdLnBhcj1wOwogICAgdnR4W3NdLmRlcHRoPWRlcDsKICAgIHZ0eFtzXS5zaXplPTE7CiAgICBmb3IoYXV0byBpdD1sW3NdLmJlZ2luKCk7aXQhPWxbc10uZW5kKCk7aXQrKykKICAgIHsKICAgICAgICBpZigqaXQ9PXApCiAgICAgICAgY29udGludWU7CiAgICAgICAgZGZzKCppdCxzLGRlcCsxKTsKICAgICAgICB2dHhbc10uc2l6ZSs9dnR4WyppdF0uc2l6ZTsKICAgIH0KfQp2b2lkIGhsZChsbCBzLGxsIHApCnsKICAgIGlmKGhlYWRbY2luZHhdPT0tMSkKICAgIGhlYWRbY2luZHhdPXM7CiAgICB2dHhbc10uY2hhaW49Y2luZHg7CiAgICB2dHhbc10uY2hhaW5wb3M9cG9zOwogICAgdnR4W3NdLnNlZ3Bvcz1zcG9zOwogICAgYltzcG9zKytdPXZ0eFtzXS5kYXRhOwogICAgbGwgc3BlY2lhbD0tMSxzc2l6ZT0wOwogICAgZm9yKGF1dG8gaXQ9bFtzXS5iZWdpbigpO2l0IT1sW3NdLmVuZCgpO2l0KyspCiAgICB7CiAgICAgICAgaWYoKml0PT1wKQogICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmKHZ0eFsqaXRdLnNpemU+c3NpemUpCiAgICAgICAgewogICAgICAgICAgICBzc2l6ZT12dHhbKml0XS5zaXplOwogICAgICAgICAgICBzcGVjaWFsPSppdDsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgfQogICAgaWYoc3BlY2lhbCE9LTEpCiAgICB7CiAgICAgICAgcG9zKys7CiAgICAgICAgaGxkKHNwZWNpYWwscyk7CiAgICB9CiAgICBmb3IoYXV0byBpdD1sW3NdLmJlZ2luKCk7aXQhPWxbc10uZW5kKCk7aXQrKykKICAgIHsKICAgICAgICBpZigoKml0PT1wKXx8KCppdD09c3BlY2lhbCkpCiAgICAgICAgY29udGludWU7CiAgICAgICAgcG9zPTE7CiAgICAgICAgY2luZHgrKzsKICAgICAgICBobGQoKml0LHMpOwogICAgfQp9CmxsIHNlZ3RbNDAwMDVdOwp2b2lkIGJ1aWxkKGxsIHMsbGwgZSxsbCBwKQp7CiAgICBpZihzPT1lKQogICAgewogICAgICAgIHNlZ3RbcF09YltzXTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBsbCBtaWQ9KHMrZSkvMjsKICAgIGJ1aWxkKHMsbWlkLDIqcCsxKTsKICAgIGJ1aWxkKG1pZCsxLGUsMipwKzIpOwogICAgc2VndFtwXT1zZWd0WzIqcCsxXStzZWd0WzIqcCsyXTsKfQpsbCBxdWVycnkobGwgcyxsbCBlLGxsIHAsbGwgcWwsbGwgcWgpCnsKICAgIGlmKHM+ZSkKICAgIHJldHVybiAwOwogICAgaWYocz5xaHx8ZTxxbCkKICAgIHJldHVybiAwOwogICAgaWYocz49cWwmJmU8PXFoKQogICAgcmV0dXJuIHNlZ3RbcF07CiAgICBsbCBtaWQ9KHMrZSkvMjsKICAgIGxsIHU9cXVlcnJ5KHMsbWlkLDIqcCsxLHFsLHFoKTsKICAgIGxsIHY9cXVlcnJ5KG1pZCsxLGUsMipwKzIscWwscWgpOwogICAgcmV0dXJuIHUrdjsKfQpsbCBnZXRhbnMobGwgdSxsbCB2KQp7CiAgICBsbCBjMSxjMixzdW09MDsKICAgIGMyPXZ0eFt2XS5jaGFpbjsKICAgIHdoaWxlKDEpCiAgICB7CiAgICAgICAgYzE9dnR4W3VdLmNoYWluOwogICAgICAgIGlmKHU9PXYpCiAgICAgICAgcmV0dXJuIHN1bTsKICAgICAgICBpZihjMT09YzIpCiAgICAgICAgewogICAgICAgICAgICBzdW0rPXF1ZXJyeSgwLHNwb3MtMSwwLHZ0eFt2XS5zZWdwb3MrMSx2dHhbdV0uc2VncG9zKTsKICAgICAgICAgICAgcmV0dXJuIHN1bTsKICAgICAgICB9CiAgICAgICAgbGwgcD1oZWFkW3Z0eFt1XS5jaGFpbl07CiAgICAgICAgaWYocD09dSkKICAgICAgICB7CiAgICAgICAgICAgIHN1bSs9cXVlcnJ5KDAsc3Bvcy0xLDAsdnR4W3BdLnNlZ3Bvcyx2dHhbdV0uc2VncG9zKTsKICAgICAgICAgICAgdT12dHhbcF0ucGFyOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgIHN1bSs9cXVlcnJ5KDAsc3Bvcy0xLDAsdnR4W3BdLnNlZ3BvcysxLHZ0eFt1XS5zZWdwb3MpOwogICAgICAgIHU9cDt9CiAgICB9Cn0KbGwgc29sdmUxKGxsIHgsbGwgeSkKewogICAgbGwgbGNhPWdldGxjYSh4LHkpOwogICAgbGwgdT1nZXRhbnMoeCxsY2EpOwogICAgbGwgdj1nZXRhbnMoeSxsY2EpOwogICAgcmV0dXJuIHYrdTsKfQpsbCBleHRyYWN0KGxsIHUsbGwgdixsbCBrLGxsIHApCnsKICAgIGxsIGNvdW50PXA7CiAgICB3aGlsZSgxKQogICAgewogICAgICAgIGxsIHUxPXZ0eFt1XS5jaGFpbnBvczsKICAgICAgICBpZihjb3VudC11MTw9aykKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlKGNvdW50PmspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgICAgICB1PXZ0eFt1XS5wYXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGNvdW50LT11MTsKICAgICAgICAgICAgdT12dHhbaGVhZFt2dHhbdV0uY2hhaW5dXS5wYXI7CiAgICAgICAgfQogICAgfQp9CmxsIGdldGt0aChsbCB4LGxsIHksbGwgaykKewogICAgbGwgbGNhPWdldGxjYSh4LHkpOwogICAgbGwgdTE9dnR4W3hdLmRlcHRoLXZ0eFtsY2FdLmRlcHRoKzE7CiAgICBpZih1MT49aykvLyBhbnMgbGllcyBpbiAgc3VidHJlZSBjb250YWluaW5nIHgKICAgICAgICByZXR1cm4gZXh0cmFjdCh4LGxjYSx1MS1rKzEsdTEpOwogICAgZWxzZS8vYW5zIGxpZXMgaW4gc3VidHJlZSBjb250YWluaW5nIHkKICAgIHsKICAgICAgICBsbCB1Mj12dHhbeV0uZGVwdGgtdnR4W2xjYV0uZGVwdGgrMTsKICAgICAgICByZXR1cm4gZXh0cmFjdCh5LGxjYSxrLXUxKzEsdTIpOwogICAgfQp9CnN0cnVjdCBlZGdlCnsKICAgIGxsIHZydHgsY29zdDsKfTsKbGlzdDxlZGdlPmwxWzEwMDA1XTsKdm9pZCBlZnMobGwgcyxsbCBwLGxsIGMpCnsKICAgIHZ0eFtzXS5kYXRhPWM7CiAgICBmb3IoYXV0byBpdD1sMVtzXS5iZWdpbigpO2l0IT1sMVtzXS5lbmQoKTtpdCsrKQogICAgewogICAgICAgIGlmKGl0LT52cnR4PT1wKQogICAgICAgIGNvbnRpbnVlOwogICAgICAgIGVmcyhpdC0+dnJ0eCxzLGl0LT5jb3N0KTsKICAgIH0KfQppbnQgbWFpbigpCnsKICAgIGxsIHQsbixpLHgseSx6OwogICAgc2NhbmYoIiVsbGQiLCZ0KTsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBzY2FuZigiJWxsZCIsJm4pOwogICAgICAgIGZvcihpPTA7aTwxMDAwNTtpKyspewogICAgICAgIGxbaV0uY2xlYXIoKTsKICAgICAgICBsMVtpXS5jbGVhcigpO30KICAgICAgICBmb3IoaT0xO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBzY2FuZigiJWxsZCVsbGQlbGxkIiwmeCwmeSwmeik7CiAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgeS0tOwogICAgICAgICAgICBsW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICAgICAgbFt5XS5wdXNoX2JhY2soeCk7CiAgICAgICAgICAgIGVkZ2UgazE7CiAgICAgICAgICAgIGsxLnZydHg9eTsKICAgICAgICAgICAgazEuY29zdD16OwogICAgICAgICAgICBsMVt4XS5wdXNoX2JhY2soazEpOwogICAgICAgICAgICBrMS52cnR4PXg7CiAgICAgICAgICAgIGwxW3ldLnB1c2hfYmFjayhrMSk7CiAgICAgICAgfQogICAgICAgIGVmcygwLC0xLDApOwogICAgICAgIGVpbmR4PTA7CiAgICAgICAgZXVsZXIoMCwtMSwxKTsKICAgICAgICBmb3IoaT0wO2k8ODAwMDU7aSsrKQogICAgICAgIHNlZ1tpXT1tYWtlX3BhaXIoTUFYLDApOwogICAgICAgIGJ1aWxkcygwLGVpbmR4LTEsMCk7CiAgICAgICAgY2luZHg9MDsKICAgICAgICBwb3M9MTsKICAgICAgICBzcG9zPTA7CiAgICAgICAgbWVtc2V0KGhlYWQsLTEsc2l6ZW9mKGhlYWQpKTsKICAgICAgICBtZW1zZXQoc2VndCwwLHNpemVvZihzZWd0KSk7CiAgICAgICAgZGZzKDAsLTEsMSk7CiAgICAgICAgaGxkKDAsLTEpOwogICAgICAgIGJ1aWxkKDAsc3Bvcy0xLDApOwogICAgICAgIGNoYXIgc3RyWzEwXTsKICAgICAgICB3aGlsZSgxKQogICAgICAgIHsKICAgICAgICAgICAgc2NhbmYoIiVzIixzdHIpOwogICAgICAgICAgICBpZihzdHJjbXAoc3RyLCJET05FIik9PTApCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBpZihzdHJjbXAoc3RyLCJESVNUIik9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNjYW5mKCIlbGxkJWxsZCIsJngsJnkpOwogICAgICAgICAgICAgICAgeC0tOwogICAgICAgICAgICAgICAgeS0tOwogICAgICAgICAgICAgICAgcHJpbnRmKCIlbGxkXG4iLHNvbHZlMSh4LHkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNjYW5mKCIlbGxkJWxsZCVsbGQiLCZ4LCZ5LCZ6KTsKICAgICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgICAgIHktLTsKICAgICAgICAgICAgICAgIGxsIHU9Z2V0a3RoKHgseSx6KTsKICAgICAgICAgICAgICAgIHByaW50ZigiJWxsZFxuIix1KzEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KfQ==