#include<bits/stdc++.h>
using namespace std;
const long long MaxN = 1e5 +5;
long long n,q;
struct DSU
{
long long lab[3*MaxN];
void init()
{
for (long long i=1; i<=2*n+1; i++)
{
lab[i]=-1;
}
}
long long get_root(long long u)
{
if(lab[u]<0) return u;
return lab[u]=get_root(lab[u]);
}
void unite(long long u , long long v)
{
long long x = get_root(u), y=get_root(v);
if(x==y)
{
return;
}
if(lab[x]>lab[y]) swap(x,y);
lab[x]+=lab[y];
lab[y]=x;
return;
}
bool check(long long u, long long v)
{
return get_root(u)==get_root(v);
}
long long get_size(long long u)
{
return -lab[get_root(u)];
}
};
DSU dsu;
struct QUERY
{
long long num;
long long u;
long long v;
};
QUERY query[MaxN];
void input()
{
cin >> n >>q;
for (long long i=1; i<=q; i++)
{
cin >> query[i].num >> query[i].u >> query[i].v;
}
}
void solve()
{
dsu.init();
for (long long i=1; i<=q; i++)
{
long long num = query[i].num;
long long u = query[i].u;
long long v = query[i].v;
if(num==1)
{
dsu.unite(u,v+n);
dsu.unite(v,u+n);
}
else
{
if(dsu.get_root(u)==dsu.get_root(v+n))
{
cout << "FATAL" << "\n";
}
else if(dsu.get_root(u)==dsu.get_root(v))
{
cout << "SAFE" << "\n";
}
else
{
cout << "DUNNO" << "\n";
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbG9uZyBsb25nIE1heE4gPSAxZTUgKzU7CmxvbmcgbG9uZyBuLHE7CnN0cnVjdCBEU1UKewogICAgbG9uZyBsb25nIGxhYlszKk1heE5dOwogICAgdm9pZCBpbml0KCkKICAgIHsKICAgICAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PTIqbisxOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBsYWJbaV09LTE7CiAgICAgICAgfQogICAgfQogICAgbG9uZyBsb25nIGdldF9yb290KGxvbmcgbG9uZyB1KQogICAgewogICAgICAgIGlmKGxhYlt1XTwwKSByZXR1cm4gdTsKICAgICAgICByZXR1cm4gbGFiW3VdPWdldF9yb290KGxhYlt1XSk7CiAgICB9CiAgICB2b2lkIHVuaXRlKGxvbmcgbG9uZyB1ICwgbG9uZyBsb25nIHYpCiAgICB7CiAgICAgICAgbG9uZyBsb25nIHggPSBnZXRfcm9vdCh1KSwgeT1nZXRfcm9vdCh2KTsKICAgICAgICBpZih4PT15KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZihsYWJbeF0+bGFiW3ldKSBzd2FwKHgseSk7CiAgICAgICAgbGFiW3hdKz1sYWJbeV07CiAgICAgICAgbGFiW3ldPXg7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgYm9vbCBjaGVjayhsb25nIGxvbmcgdSwgbG9uZyBsb25nIHYpCiAgICB7CiAgICAgICAgcmV0dXJuIGdldF9yb290KHUpPT1nZXRfcm9vdCh2KTsKICAgIH0KICAgIGxvbmcgbG9uZyBnZXRfc2l6ZShsb25nIGxvbmcgdSkKICAgIHsKICAgICAgICByZXR1cm4gLWxhYltnZXRfcm9vdCh1KV07CiAgICB9Cn07CkRTVSBkc3U7CnN0cnVjdCBRVUVSWQp7CiAgICBsb25nIGxvbmcgbnVtOwogICAgbG9uZyBsb25nIHU7CiAgICBsb25nIGxvbmcgdjsKfTsKUVVFUlkgcXVlcnlbTWF4Tl07CnZvaWQgaW5wdXQoKQp7CiAgICBjaW4gPj4gbiA+PnE7CiAgICBmb3IgKGxvbmcgbG9uZyBpPTE7IGk8PXE7IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gcXVlcnlbaV0ubnVtID4+IHF1ZXJ5W2ldLnUgPj4gcXVlcnlbaV0udjsKICAgIH0KfQp2b2lkIHNvbHZlKCkKewogICAgZHN1LmluaXQoKTsKICAgIGZvciAobG9uZyBsb25nIGk9MTsgaTw9cTsgaSsrKQogICAgewogICAgICAgIGxvbmcgbG9uZyBudW0gPSBxdWVyeVtpXS5udW07CiAgICAgICAgbG9uZyBsb25nIHUgPSBxdWVyeVtpXS51OwogICAgICAgIGxvbmcgbG9uZyB2ID0gcXVlcnlbaV0udjsKICAgICAgICBpZihudW09PTEpCiAgICAgICAgewogICAgICAgICAgICBkc3UudW5pdGUodSx2K24pOwogICAgICAgICAgICBkc3UudW5pdGUodix1K24pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpZihkc3UuZ2V0X3Jvb3QodSk9PWRzdS5nZXRfcm9vdCh2K24pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJGQVRBTCIgPDwgIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKGRzdS5nZXRfcm9vdCh1KT09ZHN1LmdldF9yb290KHYpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJTQUZFIiA8PCAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dCA8PCAiRFVOTk8iIDw8ICJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cgp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnB1dCgpOwogICAgc29sdmUoKTsKfQ==