#include <iostream>
#include <vector>
#include <variant>
#include <algorithm>
using namespace std;
vector<vector<pair<int, int>>> adj;
vector<int> path;
vector<int> vis;
vector<int> tpsort;
void dfs(int st){
vis[st] = 1;
for(auto c : adj[st]) if(!vis[c.first]) dfs(c.first);
tpsort.push_back(st);
}
variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V){
adj.assign(N, {});
vis.assign(N, 0);
for(int i = 0; i<M; i+=2){
adj[U[i]].push_back({V[i], i});
}
dfs(0);
reverse(tpsort.begin(), tpsort.end());
vector<int> indx(N, -1);
for(int i = 0; i<N; i++) indx[tpsort[i]] = i;
for(int i = 0; i<N; i++){
if(!vis[i]) continue;
for(auto j : adj[i]){
if(indx[i] > indx[j.first]) return (bool)1;
}
}
return (bool)0;
}