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<<' ';
}