http://acm.hust.edu.cn/vjudge/contest/view.action?cid=34236#problem/B
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
#define N 100005
int p[N],r[N];
int n,m;
int find(int a)
{
if(p[a]==a) return a;
int t=find(p[a]);
r[a]=(r[p[a]]+r[a])%2;
p[a]=t;
return t;
}
/*int find( int a ){
r[ a ] = ( r[ p[ a ] ]+ r[ a ] ) % 2;
return p[ a ] = p[ a ] == a ? a : find( p[ a ] );
}*/
void unin(int a,int b,int f1,int f2)
{
p[f2]=f1;
r[f2]=(r[a]+1+r[b])%2;
}
int main()
{
int t,i,a,b,k1,k2;
char ch;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
scanf("%c",&ch);
for(i=1;i<=n;i++)
{
p[i]=i;
r[i]=0;
}
while(m--)
{
cin>>ch;
scanf("%d%d",&a,&b);
if(ch=='A')
{
k1=find(a);k2=find(b);
if(k1!=k2)
printf("Not sure yet.\n");
else
{
if(r[a]!=r[b])
printf("In different gangs.\n");
else printf("In the same gang.\n");
}
}
else
{
k1=find(a);k2=find(b);
if(k1!=k2)
unin(a,b,k1,k2);
}
}
}
return 0;
}