
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Solution {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static StringTokenizer st;
static int N;
static int[] parents;
public static void makeSet() {
parents = new int [N];
for(int i = 0; i < N; i++) {
parents[i] = i;
}
}
public static int findSet(int a) {
if(a == parents[a]) return a;
return parents[a] = findSet(parents[a]);
}
public static boolean union(int a, int b) {
int aRoot = findSet(a);
int bRoot = findSet(b);
if(aRoot == bRoot) return false;
parents[bRoot] = aRoot;
return true;
}
public static void main(String[] args) throws IOException {
int T = Integer.parseInt(br.readLine());
for(int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken()) + 1;
int M = Integer.parseInt(st.nextToken());
int o, x, y;
makeSet();
bw.append("#" + tc + " ");
for(int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine(), " ");
o = Integer.parseInt(st.nextToken());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
if(o == 0) {
union(x, y);
}else {
if(findSet(x) == findSet(y)) {
bw.append("1");
}else {
bw.append("0");
}
}
}
bw.append("\n");
}
bw.flush();
}
}