#include<iostream>#include<unordered_map>#include<vector>#include<queue>usingnamespace std;intmain(){int N, M, S, T;
cin >> N >> M;
vector<int> result;
unordered_map<int, vector<int>> umap;
vector<int>inorder(N,0);for(int i =0; i < M; i++){
cin >> S >> T;
inorder[T]++;
umap[S].push_back(T);}
queue<int> que;for(int i =0; i < N; i++){if(inorder[i]==0){
que.push(i);}}while(!que.empty()){int cur = que.front();
que.pop();
result.push_back(cur);
vector<int> files = umap[cur];if(!files.empty()){for(int i =0; i < files.size(); i++){
inorder[files[i]]--;if(inorder[files[i]]==0){
que.push(files[i]);}}}}if(result.size()!= N){
cout <<-1;}else{for(int i =0; i < N -1; i++){
cout << result[i]<<" ";}
cout << result[N -1];}return0;}