fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. vector<int> ans;
  6. void DFS(int cur, int par, vector<int> &vis, vector<vector<int>> &adjList) {
  7. cout << cur << '_' << par << endl;
  8. if(vis[cur] == 1) return;
  9. if(vis[cur] == 2) {
  10. ans.push_back(cur);
  11. return;
  12. }
  13. vis[cur] = 2;
  14. for(auto &nx: adjList[cur]) {
  15. if(nx != par) {
  16. DFS(nx, cur, vis, adjList);
  17. if(ans.size() > 0 && ans.back() == nx) {
  18. if(cur == ans.front()) ans.push_back(-1);
  19. else ans.push_back(cur);
  20. return;
  21. }
  22. }
  23. }
  24. vis[cur] = 1;
  25. return;
  26. }
  27. int main() {
  28. cin.tie(0);
  29. ios_base::sync_with_stdio(0);
  30. int n, m;
  31. cin >> n >> m;
  32. vector<vector<int>> adjList(n);
  33. vector<int> vis(n);
  34. for(int i = 0; i < m; i++) {
  35. int u, v;
  36. cin >> u >> v;
  37. u--, v--;
  38. adjList[u].push_back(v);
  39. adjList[v].push_back(u);
  40. }
  41.  
  42. for(int i = 0; i < n; i++){
  43. if(!vis[i]){
  44. DFS(i, -1, vis, adjList);
  45. cout << i << endl;
  46. if(!ans.empty()) break;
  47. }
  48. }
  49. if(ans.empty()) {
  50. cout << "IMPOSSIBLE\n";
  51. } else {
  52. cout << ans.size() << '\n';
  53. ans.back() = ans.front();
  54. for(auto a: ans) {
  55. cout << a + 1 << ' ';
  56. }
  57. cout << '\n';
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 0.01s 5292KB
stdin
10 20
9 8
9 5
6 4
5 10
7 5
7 8
3 4
6 5
2 1
10 4
6 1
9 7
7 3
4 5
2 9
5 3
2 3
8 5
6 7
3 8
stdout
0_-1
1_0
8_1
7_8
6_7
4_6
8_4
2_1
3_2
5_3
4_5
0
11
9 5 7 8 0 5 6 4 3 2 9