// Problem:
// P1960 郁闷的记者
//
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1960
// Memory Limit: 500 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N=1e4+10;
int cnt1[N];//记录名次
int cnt2[N];
int n,m;
vector<int> e[N];
int din1[N];
int din2[N];
void toposort(){
priority_queue<int> a;
priority_queue<int,vector<int>,greater<int>> b;
for(int i=1;i<=n;++i){
//cout<<din1[i]<<endl;
if(din1[i]==0){
a.push(i);b.push(i);//cout<<i<<endl;
}
}
int now=0;
while(a.size()){
auto t=a.top();
a.pop();
cnt1[t]=++now;
//cout<<t<<endl;
for(auto x:e[t]){
if(--din1[x]==0) a.push(x);
}
}
now=0;
while(b.size()){
auto t=b.top();
b.pop();
cnt2[t]=++now;
for(auto x:e[t]){
if(--din2[x]==0) b.push(x);
}
}
}
int main(){
cin>>n>>m;
while(m--){
int a,b;cin>>a>>b;
e[a].push_back(b);
din1[b]++;din2[b]++;
}
toposort();
for(int i=1;i<=n;++i) cout<<cnt2[i]<<endl;
for(int i=1;i<=n;++i){
if(cnt1[i]!=cnt2[i]){
cout<<1<<endl;
return 0;
}
}
cout<<0<<endl;
return 0;
}
考虑维护字典序最大和最小的情况,不一样就不一样