https://www.acwing.com/activity/content/problem/content/1583/
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int N=30010;
int n,p[N],len[N],siz[N];
//len[i],i到根节点距离
//siz[i],i节点后面跟的节点数量(包括自己)
int find(int x){
if(x!=p[x]){
int u=find(p[x]);
len[x]+=len[p[x]];
p[x]=u;
}
return p[x];
}
void solve()
{ cin>>n;
for(int i=1;i<N;i++) {p[i]=i;siz[i]=1;}
while(n--){
char s;int z,y;
cin>>s>>z>>y;
int tz=find(z),ty=find(y);
if(s=='M'){//让z跟在y后面
if(tz==ty) continue;
p[tz]=ty;
len[tz]=siz[ty];//tz到根节点距离变成ty后面数量
siz[ty]+=siz[tz];//ty节点后面数量加上tz
}else{
if(tz!=ty){cout<<"-1\n";continue;}
int ti=max(abs(len[z]-len[y])-1,0);
cout<<ti<<endl;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
return 0;
}