#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N=100;
vector<int> e[N],tp;//e[x]存顶点x的邻点,tp存拓扑序列
int din[N];//存顶点x的入度
int n,m;
//卡恩算法
bool toposort(){
queue<int> q;
for(int i=1;i<=n;i++){
if(din[i]==0) q.push(i);
}
while(q.size()){
int x=q.front();
tp.push_back(x);
q.pop();
for(int i=0;i<e[x].size();i++){
din[e[x][i]]--;
if(din[e[x][i]]==0){
q.push(e[x][i]);
}
}
}
if(tp.size()==n) return true;
else return false;
}
int main(){
cin>>n>>m;//n个顶点,m条边
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
e[a].push_back(b);
din[b]++;
}
if(!toposort()) cout<<"没有拓扑序"<<endl;
else{
for(int i=0;i<tp.size();i++){
cout<<tp[i]<<" ";
}
cout<<endl;
}
return 0;
}