#include <bits/stdc++.h>
#define int long long
#define double long double
#define elif else if
#define fin(x) freopen (x,"r",stdin)
#define fout(x) freopen (x,"w",stdout)
#define rnt register int
#define reg(i,x,y) for (register int i=(x);i<=(y);++i)
#define Reg(i,x,y) for (register int i=(y);i>=(x);--i)
using namespace std;
namespace rwm {inline int read () {int s=0,w=0;char c=getchar ();while (!isdigit (c)){w|=(c=='-');c=getchar ();}while (isdigit (c)) {s=(s<<1)+(s<<3)+(c^48);c=getchar ();}return w?-s:s;}inline void write (int x) {if (x<0) putchar ( '-'),x=-x;if (x>9) write (x/10);putchar (x%10|48);}inline void writesp (int x) {write (x),putchar (' ');}inline void writeln (int x) {write (x),putchar ('\n');}inline int square (int x) {return x*x;}inline int floor (double x) {return x;}inline int ceil (double x) {return (int)(x+0.5);}inline int gcd (int x,int y) {int z=x%y;while (z) x=y,y=z,z=x%y;return y;}inline int lcm (int x,int y) {return x/gcd (x,y)*y;}};
using namespace rwm;
int n,f[30001],th[30001],fr[30001];
inline int find (int x)
{
if (f[x]==x) return x;
int p=find (f[x]);
fr[x]+=fr[f[x]];
return f[x]=p;
}
inline void merge (int x,int y)
{
fr[x]+=th[y];
f[x]=y;
th[y]+=th[x];
th[x]=0;
}
signed main ()
{
n=read ();
reg (i,1,30000) f[i]=i,th[i]=1,fr[i]=0;
while (n--)
{
char ch=getchar ();
int x=read (),y=read ();
if (ch=='M') merge (find (x),find (y));
else
if (find (x)!=find (y)) writeln (-1);
else writeln (abs (fr[x]-fr[y])-1);
}
return 0;
}