#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
using namespace std;
using vi = vector<int>;
template<typename T>
using vec = vector<T>;
const int N=2e5+5;
vec<pii> adj[N];
bool vis[N];
int de[N], n;
deque<int> vans;
vi a[N], b[N];
bool solve(int u, int p, int e){
	vis[u]=true;
	int c[4]={-1,-1,-1,-1};
	repa(v,adj[u]){
		if(v.se==e) continue;
		if(de[v.se]==u) a[v.fi].pb(v.se);
		else b[v.fi].pb(v.se);
	}
	rep(i,0,n){
		while(a[i].size() && b[i].size()){
			if(c[0]==-1) c[0]=a[i].back(), c[1]=b[i].back();
			else c[2]=a[i].back(), c[3]=b[i].back();
			a[i].ppb();
			b[i].ppb();
		}
		a[i].clear();
		b[i].clear();
	}
	if(min({c[0],c[1],c[2],c[3]})!=-1){
		vans={c[0],c[1],c[2],c[3],c[1],c[0],c[3],c[2]};
		return true;
	}
	repa(v,adj[u]) if(!vis[v.fi]) if(solve(v.fi,u,v.se)){
		vans.pf(v.se);
		vans.pb(v.se);
		return true;
	}
	return false;
}
std::variant<bool, std::vector<int>> find_journey(
	int N, int M, std::vector<int> U, std::vector<int> V) {
	vi a, b, ans;
	n=N;
	if(N==2){
		rep(i,0,M){
			if(U[i]==0) a.pb(i);
			else b.pb(i);
		}
		if(a.size()<2 || b.size()<1) return false;
		ans={a[0],b[0],a[1],a[0],b[0],a[1]};
		return ans;
	}
	rep(i,0,M) adj[U[i]].pb({V[i],i});
	rep(i,0,M) de[i]=U[i];
	if(N<=2) return false;
	int c[4]={-1,-1,-1,-1};
	rep(i,0,M){
		if(U[i]==0 && V[i]==1) c[0]=(i);
		if(U[i]==1 && V[i]==0) c[1]=(i);
		if(U[i]==0 && V[i]==2) c[2]=(i);
		if(U[i]==2 && V[i]==0) c[3]=(i);
	}
	ans={c[0],c[1],c[2],c[3],c[1],c[0],c[3],c[2]};
	if(min({c[0],c[1],c[2],c[3]})!=-1)return ans;
	if(solve(0,-1,-1)){
		ans.clear();
		repa(e,vans) ans.pb(e);
		return ans;
	}
	return false;
}
| # | 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... |