#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pb push_back
// #define endl '\n'
typedef pair<int,int> pii;
const int N = 5005;
const int mod = 998244353;
const int INF = (int)(1e9)+5;
struct Edge
{
int u, v, w;
bool operator < (Edge e) const
{
if(w!=e.w) return w<e.w;
if(u!=e.u) return u<e.u;
return v<e.v;
}
};
int n, m;
vector<Edge> ori, edges;
int dist[N];
bool BF(int init)
{
for(int i = 0;i <= n;i++) dist[i] = INF;
dist[init] = 0;
for(int k = 0;k <= n;k++)
for(auto [u,v,w] : edges)
if(dist[u]!=INF && dist[v]>dist[u]+w)
dist[v] = dist[u]+w;
for(auto [u,v,w] : edges)
if(dist[u]!=INF && dist[v]>dist[u]+w)
return false;
return true;
}
int32_t main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, q;
cin >> n >> q;
for(int i = 1;i <= n;i++) edges.pb({i-1,i,1}), edges.pb({i,i-1,0});
while(q--)
{
int l, r, k, op;
cin >> l >> r >> k >> op;
l++, r++;
int t = r-l+1;
if(op==0) edges.pb({l-1,r,t-k});
else edges.pb({r,l-1,k-t-1});
}
if(!BF(n))
{
cout << -1 << endl;
return 0;
}
for(int i = 1;i <= n;i++) cout << (dist[i-1]==dist[i] ? 0 : 1) << " ";
cout << endl;
return 0;
}