/*
一开始第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:\n",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\n",tmp,num[tmp],move[a]);
}
}
}
return 0;
}