#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
vector<int> sortare_top(vector<int>&grad_i,vector<vector<int> >&graf)
{
queue<int> q;
for(int i=1;i<grad_i.size();i++)
{
if(grad_i[i]==0)
{
q.push(i);
grad_i[i]--;
}
}
vector<int>sortat;
while(!q.empty())
{
int ind=q.front();
sortat.push_back(ind);
//cout<<ind<<' ';
q.pop();
for(auto x:graf[ind])
{
grad_i[x]--;
if(grad_i[x]==0)
{
q.push(x);
grad_i[x]--;
}
}
}
return sortat;
}
int main()
{
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int n,m;
fin>>n>>m;
vector<vector<int> >graf(n+1);
vector<int>grad_i(n+1,0);
for(int i=0;i<m;i++)
{
int a,b;
fin>>a>>b;
graf[a].push_back(b);
grad_i[b]++;
}
for(int i=0;i<grad_i.size();i++)
cout<<grad_i[i]<<' ';
vector<int>sortat=sortare_top(grad_i,graf);
if(sortat.size()==n)
{
for(int i=0;i<sortat.size();i++)
fout<<sortat[i]<<' ';
}
fin.close();
fout.close();
return 0;
}