Link to this code:
https://cses.fi/paste/9744bd796ec2b73ac3dc18/# include <bits/stdc++.h>
using namespace std;
// # define int long long
vector<vector<int>> graph;
vector<bool> vis;
vector<int> par, path;
void get_path(int src, int dst) {
path.push_back(dst);
for (; src != dst ; src = par[src]) path.push_back(src);
path.push_back(dst);
}
bool dfs(int node, int parent) {
if (vis[node]) {
get_path(parent, node);
return 1;
}
par[node] = parent;
vis[node] = 1;
for (auto neig : graph[node]) {
if (neig == parent) continue;
if (dfs(neig, node)) return 1;
}
return 0;
}
void solve() {
int n, k, u, v; cin >> n >> k;
graph.assign(n + 1, vector<int>());
vis.assign(n + 1, 0);
par.assign(n + 1, -1);
while (k--) {
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
}
for (int node = 1 ; node <= n; node++) {
if(!vis[node] && dfs(node, -1)) {
cout << path.size() << '\n';
for (auto x : path) cout << x << " ";
return;
}
}
cout << "IMPOSSIBLE\n";
}
signed main() {
solve();
return 0;
}