CSES - Shared codeLink to this code:
https://cses.fi/paste/cdb89ef451654ba4695dda/
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
vector<int>solution;
int node;
void dfs(set<int>*graph,int u){
while(!graph[u].empty()){
node=*graph[u].begin();
graph[u].erase(node);
dfs(graph,node);
}
solution.emplace_back(u);
}
#define IM puts("IMPOSSIBLE");
int main(){
int n,m,a,b;
cin>>n>>m;
set<int>graph[n+1];
vector<int>indegree(n+1,0),outdegree(n+1,0);
for(int i=0;i<m;i++){
cin>>a>>b;
graph[a].insert(b);
indegree[b]++;
outdegree[a]++;
}
if(indegree[1]!=outdegree[1]-1){
IM
return 0;
}
for(int i=2;i<n;i++){
if(indegree[i]!=outdegree[i]){
IM
return 0;
}
}
if(indegree[n]-1!=outdegree[n]){
IM
return 0;
}
dfs(graph,1);
if(solution.size()!=m+1){
IM
return 0;
}
reverse(solution.begin(),solution.end());
for(int i:solution)cout<<i<<" ";
return 0;
}