#include<bits/stdc++.h>
using namespace std;
const int Maxn=1e6+5;
const int Maxm=1e7+5;
inline int Read(){
int x=0;char ch=0;
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return x;
}
int n,m;
int now[Maxn][3],nxtn[Maxm<<1],head[Maxn],nxt[Maxm<<1],to[Maxm<<1],val[Maxm],ans[Maxm];
int in[Maxn];
inline void add(int u,int v,int w){
++nxt[0];
to[nxt[0]]=v;
val[nxt[0]]=w;
ans[nxt[0]]=-1;
nxt[nxt[0]]=head[u];
head[u]=nxt[0];
nxtn[nxt[0]]=now[u][w];
now[u][w]=nxt[0];
return ;
}
inline void dfs(int u,int w){
while(now[u][w]&&ans[now[u][w]]!=-1)now[u][w]=nxtn[now[u][w]];
if(!now[u][w]){
w=w==1?2:1;
while(now[u][w]&&ans[now[u][w]]!=-1)now[u][w]=nxtn[now[u][w]];
}
if(!now[u][w])return ;
ans[now[u][w]]=0;
ans[now[u][w]^1]=1;
int e=now[u][w];
now[u][w]=nxtn[now[u][w]];
dfs(to[e],val[e]);
for(int i=now[u][w];i;i=nxt[i]){
int v=to[i];
head[u]=nxt[i];
if(ans[i]==-1){
ans[i]=0;
ans[i^1]=1;
dfs(v,val[i]);
}
}
}
int main(){
// freopen("data.in","r",stdin);freopen("data.out","w",stdout);
nxt[0]=1;
n=Read(),m=Read();
for(int i=1;i<=m;++i){
int u=Read(),v=Read(),w=Read();
add(u,v,w);
add(v,u,w);
++in[u];
++in[v];
}
for(int i=1;i<=n;++i){
if(in[i]&1){
add(i,n+1,1);
add(n+1,i,1);
}
}
dfs(1,1);
for(int i=1;i<=m;++i){
if(ans[i<<1])putchar('1');
else putchar('0');
}
puts("");
return 0;
}