Link to this code: https://cses.fi/paste/e1e8733260f2d739675974/
#include<bits/stdc++.h>
using namespace std;
class RoundTrip{
  int n,m;
  vector<int> *g;
  public:
      vector<bool>onStack;
      vector<int>vis;
      vector<int>sol;
    RoundTrip(int n,int m,vector<int> g[]){
      this->n=n;
      this->m=m;
      this->g=g;
      onStack.resize(n+1,false);
      vis.resize(n+1,0);
    }
    bool dfs(int u){
       if(vis[u]){
          if(onStack[u]){
            onStack[u]=false;
            sol.push_back(u);
            return true;
          }          
          return false;
       }
       onStack[u]=true;
        vis[u]=true;
        for(int v:g[u]){
          if(dfs(v)){
            if(onStack[u]){
               sol.push_back(u);
               onStack[u]=false;
               return true;
            }
            else{
               sol.push_back(u);
               return false;
            }
          }
          if(!sol.empty() and sol[0]==sol.back())return false;
        }
      onStack[u]=false;
      return false;
    }
  void printLoop(){
    if(sol.empty()){
      cout<<"IMPOSSIBLE\n";
    }else{
      reverse(sol.begin(),sol.end());
      cout<<sol.size()<<endl;
      for(int i:sol)cout<<i<<" ";
    }
  }
};
int main(){
  int n,m,a,b;
  cin>>n>>m;
  vector<int>g[n+1];
  for(int i=0;i<m;i++){
    cin>>a>>b;
    g[a].push_back(b);
  }
 RoundTrip ans(n,m,g);
 for(int i=1;i<=n;i++){
  if(ans.vis[i])continue;
    ans.dfs(i);
     if(!ans.sol.empty())break;
 }
     ans.printLoop();

  return 0;
}