Link to this code:
https://cses.fi/paste/cb3457f2c5c9e79f8fb0a9/#include<bits/stdc++.h>
using namespace std;
constexpr int maxN=1e5+5;
int n,m,deg[maxN];
vector<int> adj[maxN],order;
queue<int> q;
int main(){
cin.tie(nullptr)->sync_with_stdio(0);
cin>>n>>m;
for(int a,b;m--;){
cin>>a>>b;
deg[b]++;
adj[a].emplace_back(b);
}
for(int i = 1;i<=n;i++)if(!deg[i])q.push(i);
for(int tmp;!q.empty();){
tmp=q.front(),q.pop();
order.emplace_back(tmp);
for(int i:adj[tmp]){
deg[i]--;
if(!deg[i])q.push(i);
}
}
if(order.size()<n){
cout<<"IMPOSSIBLE";
return 0;
}
for(int i:order)cout<<i<<' ';
}