#include <fstream>
#include <vector>
using namespace std;
int n, m;
vector<int> parent;
vector<int> rang;
int find(int x)
{
if (x != parent[x])
parent[x] = find(parent[x]);
return parent[x];
}
void unite(int x, int y)
{
int px = find(x);
int py = find(y);
if (px < py)
{
parent[py] = px;
}
else
{
parent[px] = py;
}
if (rang[px] == rang[py])
rang[px]++;
}
void print_vec(vector<int> &vec)
{
for (int i = 1; i < vec.size(); ++i)
{
printf("%d ", vec[i]);
}
printf("\n");
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &n, &m);
parent.resize(n+1);
for (int i = 1; i <= n; ++i)
parent[i] = i;
rang.resize(n+1, 0);
int t, x, y;
while (m--)
{
scanf("%d %d %d", &t, &x, &y);
if (t == 1)
{
unite(x, y);
printf("%d %d\n", x, y);
print_vec(parent);
print_vec(rang);
}
else
{
if (find(x) == find(y))
printf("DA\n");
else
printf("NU\n");
}
}
}