#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,f,siz[100005],ans[100005],ass,hei[100005];
vector<int>v[2];
// set<int>s[100005];
vector<int>w[100005][2];
bool vis[100005];
stack<pair<pair<int,int>,int>>p;
void dfs(int x){
vis[x]=1;
ass++;
for(int i=0;i<w[x][0].size();i++){
if(vis[w[x][0][i]]==0){
dfs(w[x][0][i]);
}
}
for(int i=0;i<w[x][1].size();i++){
if(vis[w[x][1][i]]==0){
dfs(w[x][1][i]);
}
}
}
int main(){
cin>>a>>b;
for(int i=0;i<b;i++){
cin>>c>>d;
c--;
d--;
w[c][0].push_back(d);
w[d][1].push_back(c);
}
dfs(0);
if(ass!=a){
for(int i=0;i<a;i++) cout<<-1<<' ';
return 0;
}
for(int i=0;i<a;i++){
if(w[i][0].size()==0) v[0].push_back(i);
siz[i]=w[i][0].size();
}
bool wo=0;
while(true){
int kys=0;
if(v[wo].size()==0) break;
if(v[wo].size()==1){
ans[v[wo][0]]=1;
int h=v[wo][0];
for(int j=0;j<w[h][1].size();j++){
kys=1;
siz[w[h][1][j]]--;
if(siz[w[h][1][j]]==0) v[1-wo].push_back(w[h][1][j]);
}
if(w[h][1].size()==0) v[1-wo].push_back(h);
}
else{
for(int i=0;i<v[wo].size();i++){
ans[v[wo][i]]=-1;
int h=v[wo][i];
for(int j=0;j<w[h][1].size();j++){
kys=1;
siz[w[h][1][j]]--;
if(siz[w[h][1][j]]==0) v[1-wo].push_back(w[h][1][j]);
}
if(w[h][1].size()==0) v[1-wo].push_back(h);
}
}
while(v[wo].size()!=0) v[wo].pop_back();
wo=1-wo;
if(kys==0) break;
}
for(int i=0;i<a;i++){
cout<<ans[i]<<' ';
}
}