Link to this code: https://cses.fi/paste/98940f58e4b097c9677193/
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
  int n,m;
  cin>>n>>m;
  vector<int>inDegree(n+1,0),graph[n+1];
  for(int i=0,a,b;i<m;i++){
    cin>>a>>b;
    inDegree[b]++;
    graph[a].push_back(b);
  }
  queue<int>que;
    vector<int>ans;

  for(int i=1;i<=n;i++){
    if(inDegree[i]==0){
      que.push(i);
      ans.push_back(i);
      inDegree[i]=-1;
    }
  }
  int node;
  while(!que.empty()){
   node=que.front();
   que.pop();
   for(int v:graph[node]){
      inDegree[v]--;
      if(inDegree[v]==0){
        que.push(v);
      ans.push_back(v);

      }
   }
  }
  if(ans.size()!=n){
    cout<<"IMPOSSIBLE\n";
  }else{
    for(auto &i:ans)cout<<i<<" ";
  }
  return 0;
}