#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... |