#include "islands.h"
#include <bits/stdc++.h>
using namespace std;
std::variant<bool, std::vector<int>> find_journey(
    int N, int M, std::vector<int> U, std::vector<int> V) {
    vector<vector<int>> adj(N);
    vector<int> deg(N);
    for (int i = 0; i < M; ++i) {
      adj[U[i]].push_back(V[i]);
      deg[U[i]] += 1;
    }
    for (int i = 0; i < N; ++i) {
      sort(begin(adj[i]), end(adj[i]));
      adj[i].erase(unique(begin(adj[i]), end(adj[i])), end(adj[i]));
    }
    // 0 - processing, 1 - no cycle, 2 - path to a cycle
    vector<int> state(N, -1);
    auto dfs = [&](auto& dfs, int v) -> void {
      // cout << v << " -> ";
      state[v] = 0;
      for (auto& u : adj[v]) {
        if (state[u] == -1) {
          dfs(dfs, u);
        }
        if (state[u] == 2) {
          state[v] = 2;
          return;
        }
        if (state[u] == 0) {
          state[v] = 2;
          return;
        }
      }
    };
    dfs(dfs, 0);
    // cout << "\n";
    // for (auto& u : state) cout << u << " ";
    // cout << "\n";
    if (state[0] == 2 && deg[0] >= 2) return vector<int>({1});
    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... |