#include<bits/stdc++.h>
using namespace std;
int f[100000],dang[100000],da[100000],d[100000];
int father[100000];
int find(int x)
{
if(x!=father[x])
{
father[x]=find(father[x]);
}
return father[x];
}
int he(int x,int y)
{
father[x]=y;
int a=da[x],b=da[y];
if(a<=b)
{
f[x]=d[y];
// d[y]=d[x];
int xx=d[x];
int jian=dang[d[y]]+da[x];
int t=da[x];
while(t--)
{
dang[xx]=jian;
xx=f[xx];
jian--;
// if(xx=d[y]) break;
};
d[y]=d[x];
da[y]+=da[x];
}
else
{
f[x]=d[y];
// d[y]=d[x];
int xx=d[y];
int jian=dang[x]-1;
int t=da[y];
while(t--)
{
dang[xx]=jian;
xx=f[xx];
jian--;
};
d[y]=d[x];
da[y]+=da[x];
}
}
int main()
{
// freopen("in.txt","r",stdin);
std::ios::sync_with_stdio(false);
int n;
cin>>n;
// getchar();
for(int i=1;i<=n;i++) f[i]=i,father[i]=i,d[i]=i,da[i]=1,dang[i]=0;
// for(int i=1;i<=n;i++) cout<<"father="<<find(i)<<endl;
for(int i=1;i<=n;i++)
{
char c;
cin>>c;
// scanf("%c",&c);
// cin>>c;
// cout<<c<<endl;
// getchar();
int x,y;
// scanf("%d%d",&x,&y);
cin>>x>>y;
int xx=find(x),yy=find(y);
// cout<<xx<<" "<<yy<<endl;
if(c=='M')
{
if(xx!=yy) he(xx,yy);
}
else
{
if(xx!=yy) cout<<"-1"<<endl;
else
{
cout<<abs(dang[x]-dang[y])-1<<endl;
}
}
// for(int i=1;i<=n;i++) cout<<"dang="<<dang[i]<<endl;
}
// for(int i=1;i<=n;i++) cout<<"father="<<find(i)<<endl;
// for(int i=1;i<=n;i++) cout<<"dang="<<dang[i]<<endl;
}
//记录每条队列的总长度,及时调整在队列中的位置
//记录底部,从底部开始调起,有可能需要o(n)
//如果灵活调整上下层可能只需要o(1),但是需要加入并查集的优化
//需要维护两个不同的并查集一个查询,一个进行层数的控制