/* 一开始第a个球在第a个城市 操作T a b,把第a个球所在城市的所有球移到b所在的城市 操作Q a 要求输出 第a个球在哪个城市 第a个球所在的城市有几个球 第a个球移动次数 */ #include<iostream> #include<cstring> #include<cstdio> #define move movee #define MAXN 10005 using namespace std; //第i个球所在城市,第i个球所在城市有几个球,第i个球移动次数 int F[MAXN],num[MAXN],move[MAXN]; int find(int a){ if(F[a]==-1) return a; int tmp=F[a];//保存a的父亲 F[a]=find(F[a]);// move[a]+=move[tmp]; return F[a]; } //把a所在的集合移到b所在的集合 void bing(int a,int b){ int t1=find(a); int t2=find(b); if(t1!=t2){ F[t1]=t2; move[t1]=1; num[t2]+=num[t1]; } } int main(){ int T,n,q; cin >> T; for(int tt=1;tt<=T;tt++){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++){ F[i]=-1; num[i]=1; move[i]=0; } char op[10]; int a,b; printf("Case %d: ",tt); while(q--){ scanf("%s",op); if(op[0]=='T'){ scanf("%d%d",&a,&b); bing(a,b); } else { scanf("%d",&a); int tmp=find(a); printf("%d %d %d ",tmp,num[tmp],move[a]); } } } return 0; }