#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e9;
const int N = 1e4+10;
vector<int>dir[N],v[N],con[N];
bool visited[N],rec[N],vis[N];
int sz,sum[N],a[N];
void dfs2(int s){
vis[s]=true;
int sol=-INF;
for(int i=0;i<dir[s].size();i++){
if(!vis[dir[s][i]])dfs2(dir[s][i]);
sol=max(sol,sum[dir[s][i]]+1);
}
sum[s]=sol;
}
void dfs(int s){
con[sz].push_back(s);
vis[s]=true;
for(int i=0;i<v[s].size();i++){
if(!vis[v[s][i]])dfs(v[s][i]);
}
}
bool ccc(int k){
if(!visited[k]){
visited[k]=true;
rec[k]=true;
for(int i=0;i<(int)dir[k].size();i++){
int p=dir[k][i];
if(!visited[p]&&ccc(p))return true;
else if(rec[p])return true;
}
}
rec[k]=false;
return false;
}
bool cycle(){
for(int i=0;i<N;i++){
if(ccc(i))return true;
}
return false;
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int t;
cin>>t;
while(t--){
int n,m,l,r,z;
memset(vis,false,sizeof(vis));
memset(visited,false,sizeof(visited));
memset(rec,false,sizeof(rec));
for(int i=0;i<N;i++){
v[i].clear();
dir[i].clear();
con[i].clear();
}
for(int i=0;i<N;i++)sum[i]=-INF;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>l>>r>>z;
if(z==1)dir[r].push_back(l-1);
else dir[l-1].push_back(r);
v[l-1].push_back(r);
v[r].push_back(l-1);
}
if(cycle()){
cout<<-1<<"\n";
continue;
}
sz=0;
for(int i=0;i<N;i++){
if(!vis[i]){
sz++;
dfs(i);
}
}
sum[0]=0;
for(int i=1;i<=sz;i++){
for(int j=0;j<con[i].size();j++){
int p=con[i][j];
if(!dir[p].size()){
sum[p]=0;
}
}
for(int j=0;j<con[i].size();j++){
int p=con[i][j];
if(dir[p].size()){
dfs2(p);
}
}
}
for(int i=1;i<=n;i++)a[i]=sum[i]-sum[i-1];
cout<<1<<"\n";
for(int i=1;i<=n;i++)cout<<a[i]<<" ";
cout<<"\n";
}
return 0;
}
/*
1
3 3
1 3 1
1 2 -1
2 3 -1
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKY29uc3QgbGwgSU5GID0gMWU5Owpjb25zdCBpbnQgTiA9IDFlNCsxMDsKCnZlY3RvcjxpbnQ+ZGlyW05dLHZbTl0sY29uW05dOwpib29sIHZpc2l0ZWRbTl0scmVjW05dLHZpc1tOXTsKaW50IHN6LHN1bVtOXSxhW05dOwoKCnZvaWQgZGZzMihpbnQgcyl7CiAgICB2aXNbc109dHJ1ZTsKICAgIGludCBzb2w9LUlORjsKICAgIGZvcihpbnQgaT0wO2k8ZGlyW3NdLnNpemUoKTtpKyspewogICAgICAgIGlmKCF2aXNbZGlyW3NdW2ldXSlkZnMyKGRpcltzXVtpXSk7CiAgICAgICAgc29sPW1heChzb2wsc3VtW2RpcltzXVtpXV0rMSk7CiAgICB9CiAgICBzdW1bc109c29sOwp9Cgp2b2lkIGRmcyhpbnQgcyl7CiAgICBjb25bc3pdLnB1c2hfYmFjayhzKTsKICAgIHZpc1tzXT10cnVlOwogICAgZm9yKGludCBpPTA7aTx2W3NdLnNpemUoKTtpKyspewogICAgICAgIGlmKCF2aXNbdltzXVtpXV0pZGZzKHZbc11baV0pOwogICAgfQp9Cgpib29sIGNjYyhpbnQgayl7CiAgICBpZighdmlzaXRlZFtrXSl7CiAgICAgICAgdmlzaXRlZFtrXT10cnVlOwogICAgICAgIHJlY1trXT10cnVlOwogICAgICAgIGZvcihpbnQgaT0wO2k8KGludClkaXJba10uc2l6ZSgpO2krKyl7CiAgICAgICAgICAgIGludCBwPWRpcltrXVtpXTsKICAgICAgICAgICAgaWYoIXZpc2l0ZWRbcF0mJmNjYyhwKSlyZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgZWxzZSBpZihyZWNbcF0pcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQogICAgcmVjW2tdPWZhbHNlOwogICAgcmV0dXJuIGZhbHNlOwp9Cgpib29sIGN5Y2xlKCl7CiAgICBmb3IoaW50IGk9MDtpPE47aSsrKXsKICAgICAgICBpZihjY2MoaSkpcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIGludCB0OwogICAgY2luPj50OwogICAgd2hpbGUodC0tKXsKICAgICAgICBpbnQgbixtLGwscix6OwogICAgICAgIG1lbXNldCh2aXMsZmFsc2Usc2l6ZW9mKHZpcykpOwogICAgICAgIG1lbXNldCh2aXNpdGVkLGZhbHNlLHNpemVvZih2aXNpdGVkKSk7CiAgICAgICAgbWVtc2V0KHJlYyxmYWxzZSxzaXplb2YocmVjKSk7CiAgICAgICAgZm9yKGludCBpPTA7aTxOO2krKyl7CiAgICAgICAgICAgIHZbaV0uY2xlYXIoKTsKICAgICAgICAgICAgZGlyW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIGNvbltpXS5jbGVhcigpOwogICAgICAgIH0KICAgICAgICBmb3IoaW50IGk9MDtpPE47aSsrKXN1bVtpXT0tSU5GOwogICAgICAgIGNpbj4+bj4+bTsKICAgICAgICBmb3IoaW50IGk9MTtpPD1tO2krKyl7CiAgICAgICAgICAgIGNpbj4+bD4+cj4+ejsKICAgICAgICAgICAgaWYoej09MSlkaXJbcl0ucHVzaF9iYWNrKGwtMSk7CiAgICAgICAgICAgIGVsc2UgZGlyW2wtMV0ucHVzaF9iYWNrKHIpOwogICAgICAgICAgICB2W2wtMV0ucHVzaF9iYWNrKHIpOwogICAgICAgICAgICB2W3JdLnB1c2hfYmFjayhsLTEpOwogICAgICAgIH0KICAgICAgICBpZihjeWNsZSgpKXsKICAgICAgICAgICAgY291dDw8LTE8PCJcbiI7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBzej0wOwogICAgICAgIGZvcihpbnQgaT0wO2k8TjtpKyspewogICAgICAgICAgICBpZighdmlzW2ldKXsKICAgICAgICAgICAgICAgIHN6Kys7CiAgICAgICAgICAgICAgICBkZnMoaSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3VtWzBdPTA7CiAgICAgICAgZm9yKGludCBpPTE7aTw9c3o7aSsrKXsKCiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8Y29uW2ldLnNpemUoKTtqKyspewogICAgICAgICAgICAgICAgaW50IHA9Y29uW2ldW2pdOwogICAgICAgICAgICAgICAgaWYoIWRpcltwXS5zaXplKCkpewogICAgICAgICAgICAgICAgICAgIHN1bVtwXT0wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcihpbnQgaj0wO2o8Y29uW2ldLnNpemUoKTtqKyspewogICAgICAgICAgICAgICAgaW50IHA9Y29uW2ldW2pdOwogICAgICAgICAgICAgICAgaWYoZGlyW3BdLnNpemUoKSl7CiAgICAgICAgICAgICAgICAgICAgZGZzMihwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKylhW2ldPXN1bVtpXS1zdW1baS0xXTsKICAgICAgICBjb3V0PDwxPDwiXG4iOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKWNvdXQ8PGFbaV08PCIgIjsKICAgICAgICBjb3V0PDwiXG4iOwogICAgfQoKCgogICAgcmV0dXJuIDA7Cn0KLyoKCjEKMyAzCjEgMyAxCjEgMiAtMQoyIDMgLTEKCiovCg==