![](https://i-blog.csdnimg.cn/blog_migrate/d819853141fd2b053d9a7127ab033b6b.png)
#include <iostream>
#include <cstdio>
#include <cstring>
//#include <vector>
using namespace std;
//C输入容易出错 抄博友 需看书
//关系数组没实现 需实现
//关系数组实现并不快
//挑战程序设计竞赛
int par[200002];//父亲
//int ran[200002];//树的高度
//初始化n个元素
void init(int n)
{
for(int i=0;i<n;i++)
{
par[i]=i;
//ran[i]=0;
}
//memset(par,-1,sizeof(par));
//memset(ran,0,sizeof(ran));
}
//查询树的根
int find(int x)
{
//if(par[x]==-1)
if(par[x]==x)
{
return x;
}else
{
return par[x]=find(par[x]);
}
}
//合并x和y所属的集合
void unite(int x,int y)
{
x=find(x);
y=find(y);
par[x]=y;
/*
if(x==y)
{
return;
}
if(ran[x]<ran[y])
{
par[x]=y;
}else
{
par[y]=x;
if(ran[x]==ran[y])
{
ran[x]++;
}
}*/
}
//判断x和y是否属于同一个集合
bool same(int x,int y)
{
return find(x)==find(y);
}
int main()
{
int NUM;
scanf("%d",&NUM);
for(int i=0;i<NUM;i++)
{
int N,M;
scanf("%d %d",&N,&M);
getchar();//抄博友 出错很多次 看书
//cout<<N<<" "<<M<<endl;
init(N*2+1);
for(int j=0;j<M;j++)
{
char ml;
int a;
int b;
scanf("%c%d%d",&ml,&a,&b);
getchar();//抄博友 出错很多次 看书 百练通过的程序有错误输入
//cout<<ml<<" "<<a<<" "<<b<<endl;
if(ml=='D')
{
unite(a,b+N);
unite(a+N,b);
}else if(ml=='A')
{
if(same(a,b))
{
printf("In the same gang.\n");
}else if(same(a,b+N))
{
printf("In different gangs.\n");
}else
{
printf("Not sure yet.\n");
}
}
}
}
return 0;
}