#include using namespace std; const int maxn=3e5+7; struct node{ int x,y,w,num; }a[maxn]; bool cmp(node u,node v){return u.w f; int n,m,pre[maxn]; int ffind(int x){ if (pre[x]==x) return x; return pre[x]=ffind(pre[x]); } bool _union(int x,int y){ x=ffind(x); y=ffind(y); if (x==y) return 0; pre[x]=y; return 1; } int l,r; int main(){ int T,tot;scanf("%d",&T); while (T--){ scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { a[i].num=i; scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].w); } f.reset(); sort(a+1,a+1+m,cmp); for (int i=1;i<=n;i++) pre[i]=i; tot=n; for (int i=1;i<=m;i++){ if (_union(a[i].x,a[i].y)) --tot; if (tot*2==n) {l=a[i].w;break;} } for (int i=1;i<=n;i++) pre[i]=i; tot=n; for (int i=m;i;i--){ if (_union(a[i].x,a[i].y)) --tot; if (tot*2==n) {r=a[i].w;break;} } for (int i=1;i<=m;i++){ if (a[i].wr) f.set(a[i].num); } for (int i=1;i<=m;i++) if (!f[i]) printf("1"); else printf("0"); puts(""); } return 0; }