#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN = 1e5;
int f[MAXN] = { 0 };
int n = 0, m = 0;
void build(int n)
{
	for (int i = 1; i <= n; i++)
	{
		f[i] = i;
	}
}
int find(int x)
{
	while (x != f[x])
	{
		x = f[x] = f[f[x]];
	}
	return x;
}
void merge(int a, int b)
{
	int fa = find(a), fb = find(b);
	if (fa != fb) f[b] = fa;
}
bool judge(int a, int b)
{
	int fa = find(a), fb = find(b);
	if (fa != fb) return false;
	else return true;
}
void clear(int n)
{
	for (int i = 1; i <= n; i++)
	{
		f[i] = -1;
	}
}
int main()
{
	//freopen("test2.in", "r", stdin);
	//freopen("out.out", "w", stdout);
	cin >> n >> m;
	build(n);
	for (int i = 1; i <= m; i++)
	{
		int op, a, b;
		cin >> op >> a >> b;
		if (op == 1)
		{
			merge(a, b);
			//printf("Merge %d, %d\n", a, b);
		}
		else if (op == 2)
		{
			bool ans = judge(a, b);
			if (ans) cout << "Y" << endl;
			else if (!ans) cout << "N" << endl;
		}
	}
	return 0;
}
用winmerge里试了一下,标准答案中一大堆空行不知道为啥
是第二个标准答案,我把数据下载下来了,因为数据量太大没放在这里
为啥有空行