CSES - Shared codeLink 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;
}