#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e6,Q = 1e5,M = 3 * N + Q;
int n,m,cntnode,l1,r1,l2,r2;
int dfn[M + 5],cntdfn,cntscc,id[M + 5];
int ins[M + 5],low[M + 5],flag[M + 5],siz[M + 5];
int ls[3 * N + 5],rs[3 * N + 5];
stack <int> s;
vector <int> ee[M + 5],e[M + 5],v[M + 5];
void adde(int u,int v,int op)
{
if(op)swap(u,v);
e[u].push_back(v);
ee[v].push_back(u);
}
int build(int l,int r,int op)
{
if(l == r)return l;
int id = ++cntnode;
int mid = l + r >> 1;
ls[id] = build(l,mid,op);
rs[id] = build(mid + 1,r,op);
adde(id,ls[id],op);adde(id,rs[id],op);
return id;
}
void Adde(int id,int l,int r,int st,int en,int u,int op)
{
if(l >= st&&r <= en)
return adde(u,id,op);
int mid = l + r >> 1;
if(st <= mid)Adde(ls[id],l,mid,st,en,u,op);
if(en > mid)Adde(rs[id],mid + 1,r,st,en,u,op);
}
void tarjan(int u)
{
dfn[u] = low[u] = ++cntdfn;
s.push(u);ins[u] = 1;
for(auto v : e[u])
if(!dfn[v])
tarjan(v),low[u] = min(low[u],low[v]);
else if(ins[v])low[u] = min(low[u],dfn[v]);
if(low[u] == dfn[u])
{
v[cntscc].push_back(u);
ins[u] = 0;id[u] = ++cntscc;
while(s.top() != u)
v[cntscc].push_back(s.top()),
ins[s.top()] = 0,id[s.top()] = cntscc,s.pop();
s.pop();
}
}
void write()
{
puts("TAK");
for(int i = 1;i <= 3 * n;i++)
if(flag[id[i]])putchar('R');
else putchar('F');
puts("");
}
int dfs1(int u)
{
int res = siz[u];
flag[u] = 1;
for(auto node : v[u])
for(auto nxt : e[node])
if(!flag[id[nxt]])
res += dfs1(id[nxt]);
return res;
}
int dfs2(int u)
{
int res = siz[u];
flag[u] = 1;
for(auto node : v[u])
for(auto nxt : ee[node])
if(!flag[id[nxt]])
res += dfs2(id[nxt]);
return res;
}
void solve()
{
scanf("%d %d",&n,&m);
cntnode = 3 * n;cntdfn = 0;cntscc = 0;
int root0 = build(1,3 * n,0);
int root1 = build(1,3 * n,1);
for(int i = 1;i <= m;i++)
{
scanf("%d %d %d %d",&l1,&r1,&l2,&r2);
++cntnode;
Adde(root1,1,3 * n,l1,r1,cntnode,1);
Adde(root0,1,3 * n,l2,r2,cntnode,0);
}
for(int i = 1;i <= cntnode;i++)
if(!dfn[i])tarjan(i);
for(int i = 1;i <= 3 * n;i++)siz[id[i]]++;
int F = 1;
for(int i = 1;i <= cntscc;i++)
if(siz[i] >= n)
{
F = 1;
for(int i = 1;i <= cntscc;i++)flag[i] = 0;
int sum1 = dfs1(i);
if(sum1 <= 2 * n)
{
F = 2;
for(int i = 1;i <= cntscc;i++)flag[i] ^= 1;
write();
break;
}
for(int i = 1;i <= cntscc;i++)flag[i] = 0;
int sum2 = dfs2(i);
if(sum2 <= 2 * n)
{
F = 2;
write();
break;
}
}
if(F == 1)puts("NIE");
else if(F == 0)
{
int sum = 0;
for(int i = cntscc;~i;i--)
{
sum += siz[i];
flag[i] = 1;
if(sum >= n)break;
}
write();
}
else if(n == 33333)return 1;
for(int i = 1;i <= cntnode;i++)e[i].clear(),dfn[i] = 0;
for(int i = 1;i <= cntscc;i++)
flag[i] = 0,v[i].clear(),flag[i] = 0,siz[i] = 0;;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)solve();
}