#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;
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 || v.se%2 || v.se+1==e) continue;
		if(de[v.se]==u && c[0]==-1) c[0]=v.se, c[1]=v.se+1;
		else if(de[v.se]==u) c[2]=v.se, c[3]=v.se+1;
		if(de[v.se]!=u && c[0]==-1) c[1]=v.se, c[0]=v.se+1;
		else if(de[v.se]!=u) c[3]=v.se, c[2]=v.se+1;
	}
	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] && (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) adj[V[i]].pb({U[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;
	vans.clear();
	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... |