#include <bits/stdc++.h>
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin >> n >> m;
array<int,3>edges[m+n];
for(int i = 0;i<m;i++){
int l,r,k,v;
cin >> l >> r >> k >> v;
k--;
l--;
l++;
r++;
int len = r-l;
//one based indexing, 0 is dummy node
if(v){
//len-(pref[r]-pref[l])<=k
//pref[l]-pref[r]<=k-len
edges[i][0]=r;
edges[i][1]=l;
edges[i][2]=k-len;
}
else{
//len-(pref[r]-pref[l])-1>=k
//pref[l]-pref[r]>=k-len+1
//pref[r]-pref[l]<=len-k-1
edges[i][0]=l;
edges[i][1]=r;
edges[i][2]=len-k-1;
}
}
for(int i = 0;i<=n-1;i++){
//pref[i+1]-pref[i]<=1
edges[i+m][0]=i;
edges[i+m][1]=i+1;
edges[i+m][2]=1;
}
m=n+m;
int pref[n+1];
fill(pref,pref+n+1,1e9);
pref[0]=0;
for(int i = 0;i<=n;i++){
for(int j = 0;j<m;j++){
if(pref[edges[j][0]]==1e9)
continue;
pref[edges[j][1]]=min(pref[edges[j][1]],pref[edges[j][0]]+edges[j][2]);
}
}
for(int j = 0;j<m;j++){
if(pref[edges[j][0]]==1e9)
continue;
int oval = pref[edges[j][1]];
pref[edges[j][1]]=min(pref[edges[j][1]],pref[edges[j][0]]+edges[j][2]);
if(oval!=pref[edges[j][1]]){
cout << -1;
return 0;
}
}
for(int i = 1;i<=n;i++){
if(pref[i]-pref[i-1]==1||pref[i]==pref[i-1]){
continue;
}
cout << -1;
return 0;
}
///no 0 cycle
for(int i = 1;i<=n;i++){
if(pref[i]==pref[i-1]){
cout << 0 << " ";
}
else{
cout << 1 << " ";
}
}
return 0;
}