rt
#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
int n,m,del[maxn],siz[maxn],ctr,dep[maxn],dp[maxn][20],f[maxn],val1[maxn],val2[maxn],vis[maxn],sum;
vector<int> nbr[maxn];
multiset<int> a[maxn],b[maxn],c;
void dfs(int cur,int fa)
{
int maxi=0;siz[cur]=1;
for(int i=0;i<nbr[cur].size();i++)
{
int nxt=nbr[cur][i];
if(del[nxt]==1||fa==nxt) continue;
dfs(nxt,cur);
if(ctr!=-1) return;
siz[cur]+=siz[nxt],maxi=max(maxi,siz[nxt]);
}
maxi=max(maxi,n-siz[cur]);
if(maxi<=(n>>1)) ctr=cur,siz[fa]=n-siz[cur];
}
inline void run(int p)
{
del[p]=1;
for(int i=0;i<nbr[p].size();i++)
{
int nxt=nbr[p][i];
if(del[nxt]==1) continue;
n=siz[nxt],ctr=-1;
dfs(nxt,0);
f[ctr]=p;
run(ctr);
}
}
void dfs2(int cur,int fa)
{
dep[cur]=dep[fa]+1,dp[cur][0]=fa;
for(int j=1;j<=18;j++) dp[cur][j]=dp[dp[cur][j-1]][j-1];
for(int i=0;i<nbr[cur].size();i++)
{
int nxt=nbr[cur][i];
if(fa==nxt) continue;
dfs2(nxt,cur);
}
}
inline int lca(int x,int y)
{
if(dep[x]>dep[y]) swap(x,y);
for(int i=18;i>=0;i--) if(dep[dp[y][i]]>=dep[x]) y=dp[y][i];
if(x==y) return x;
for(int i=18;i>=0;i--) if(dp[x][i]!=dp[y][i]) x=dp[x][i],y=dp[y][i];
return dp[x][0];
}
inline int dis(int x,int y){return dep[x]+dep[y]-2*dep[lca(x,y)];}
inline void insert(int cur)
{
int x=cur;
while(f[x]!=0)
{
a[x].insert(dis(f[x],cur));
c.erase(c.find(val2[f[x]]));
b[f[x]].erase(b[f[x]].find(val1[x]));
val1[x]=*a[x].rbegin();
b[f[x]].insert(val1[x]);
int tmp1=*b[f[x]].rbegin(),tmp2;
b[f[x]].erase(b[f[x]].find(tmp1));
tmp2=*b[f[x]].rbegin();
b[f[x]].insert(tmp1);
c.insert(tmp1+tmp2);
val2[f[x]]=tmp1+tmp2;
x=f[x];
}
}
inline void delet(int cur)
{
int x=cur;
while(f[x]!=0)
{
a[x].erase(a[x].find(dis(f[x],cur)));
c.erase(c.find(val2[f[x]]));
b[f[x]].erase(b[f[x]].find(val1[x]));
val1[x]=*a[x].rbegin();
b[f[x]].insert(val1[x]);
int tmp1=*b[f[x]].rbegin(),tmp2;
b[f[x]].erase(b[f[x]].find(tmp1));
tmp2=*b[f[x]].rbegin();
b[f[x]].insert(tmp1);
c.insert(tmp1+tmp2);
val2[f[x]]=tmp1+tmp2;
x=f[x];
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
int tmp=n;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
nbr[u].push_back(v),nbr[v].push_back(u);
}
dfs2(1,0);
ctr=-1;
dfs(1,0);
run(ctr);
n=tmp;
for(int i=1;i<=n;i++) a[i].insert(0),b[f[i]].insert(0),b[f[i]].insert(0),b[i].insert(0),c.insert(0);
for(int i=1;i<=n;i++) insert(i);
cin>>m;
sum=n;
while(m--)
{
char opt;int x;
cin>>opt;
if(opt=='G')
{
if(sum==0) cout<<"-1\n";
else if(sum==1) cout<<"0\n";
else cout<<(*c.rbegin())<<"\n";
}
else
{
cin>>x;
if(vis[x]==0){vis[x]=1;sum--;delet(x);}
else{vis[x]=0;sum++;insert(x);}
}
}
}