#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mxN = 5e5+10;
vector<array<int, 2>> adj[mxN];
bool vis[mxN], trav[mxN];
stack<int> s;
void dfs(int node) {
    vis[node] = true;
    s.push(node);
    for(auto [it, idx] : adj[node]) {
        if(trav[idx]) continue;
        if(vis[it]) {
            trav[idx] = true;
            int x = node;
            s.pop();
            vector<int> ans;
            while(x != it) {
                ans.push_back(x);
                x = s.top();
                s.pop();
            }
            s.push(it);
            ans.push_back(it);
            for(auto it : ans) {
                cout << it << ' ';
            }
            cout << '\n';
            if(node != s.top()) break;
        }
        else {
            trav[idx] = true;
            dfs(it);
            if(node != s.top()) break;
        }
    }
    vis[node] = false;
    if(!s.empty() && s.top() == node) s.pop();
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    for(int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].push_back({b, i});
        adj[b].push_back({a, i});
    }
    for(int i = 1; i <= n; i++) {
        for(auto [it, idx] : adj[i]) {
            if(!trav[idx]) dfs(i);
        }
    }
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |