#include "islands.h"
#include <bits/stdc++.h>
#define rep(a,b,c) for(ll a=b; a<c; a++)
#define repr(a,b,c) for(ll a=b-1; a>c-1; a--)
#define repa(a,b) for(auto a:b)
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back
#define mid ((l+r)>>1)
#define ppb pop_back
#define pf push_front
#define all(a) a.begin(),a.end()
using namespace std;
using vi = vector<int>;
template<typename T>
using vec = vector<T>;
const int N=2e5+5;
vec<pii> adj[N], iadj[N];
bool rem[N], vis[N];
int out[N];
std::variant<bool, std::vector<int>> find_journey(
	int N, int M, std::vector<int> U, std::vector<int> V){
	rep(i,0,M) adj[U[i]].pb({V[i],i});
	rep(i,0,M) iadj[V[i]].pb({U[i],i}), out[U[i]]++;
	int u, r;
	queue<int> nodes, edges;
	rep(i,0,N) if(!out[i]) nodes.push(i);
	r=0;
	do{
		if(r<N && out[r]<2 && !nodes.size()){
			if(out[r]){
				nodes.push(r);
				repa(v,adj[r]) if(!rem[v.se]){
					r=v.fi;
					break;
				}
			}else r=N;
		}
		while(nodes.size()){
			u=nodes.front();
			nodes.pop();
			repa(e,iadj[u]) if(!rem[e.se]) edges.push(e.se);
		}
		while(edges.size()){
			u=edges.front();
			edges.pop();
			rem[u]=true;
			out[U[u]]--;
			if(!out[U[u]]) nodes.push(U[u]);
		}
	}while(nodes.size() || (r<N && out[r]<2));
	return r<N;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |