#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
void scan(int &val)
{
val=0;
int fu=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')break;
ch=getchar();
}
if(ch=='-')fu=-1;
else val=ch-'0';
ch=getchar();
while(ch>='0'&&ch<='9')
{
val=val*10+ch-'0';
ch=getchar();
}
val*=fu;
return;
}
const int N=2*(1e5+7);
struct edge
{
int to,nxt,id;
}e[N<<1];
int t,n,m,head[N<<1],tot,ea[N<<1],eb[N<<1],c[N<<1],dep[N<<1],fa[N<<1];
bool vis[N<<1];
map<int,int>cnt;
void add(int a,int b,int c)
{
e[++tot].to=b;
e[tot].id=c;
e[tot].nxt=head[a];
head[a]=tot;
return;
}
void dfs(int u,int fath)
{
fa[u]=fath;
dep[u]=dep[fath]+1;
vis[u]=1;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(!vis[v])c[e[i].id]=1,dfs(v,u);
}
return;
}
int main()
{
scan(t);
while(t--)
{
for(int i=0;i<=m;i++)fa[i]=c[i]=head[i]=dep[i]=ea[i]=eb[i]=vis[i]=0;
tot=0;
cnt.clear();
scan(n),scan(m);
for(int i=1;i<=m;i++)
{
int a,b;
scan(a),scan(b);
add(a,b,i),add(b,a,i);
ea[i]=a,eb[i]=b;
}
dfs(1,1);
for(int i=1;i<=m;i++)if(!c[i])cnt[ea[i]]++,cnt[eb[i]]++;
if((int)cnt.size()==3&&m==n+2)
{
int u=0,a=0,b=0;
for(auto i:cnt)if(dep[u]<dep[i.first])u=i.first;
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(v==fa[u]&&c[e[i].id])b=e[i].id;
if(!c[e[i].id])a=e[i].id;
}
c[a]=1,c[b]=0;
}
for(int i=1;i<=m;i++)printf("%d",c[i]);
puts("");
}
return 0;
}