Cod sursa(job #3359372)

Utilizator Dani111Gheorghe Daniel Dani111 Data 27 iunie 2026 15:14:52
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
 
const int MAX = 1e5;
vector<pair<int, int>>G[MAX + 3];

int main() {
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    cin.tie(0); cout.tie(0);
	ios_base::sync_with_stdio(false);
 
    int N, M;
    cin >> N >> M;
    vector<int>v(M);
    for(int i = 0; i < M; i++) {
        int x, y; cin >> x >> y;
        G[x].push_back({y, i}); 
        G[y].push_back({x, i});
    }
    bool ok = 1;
    for(int i = 1; i <= N; i++) {
        ok &= (G[i].size() % 2 == 0);
    }
    vector<int>cycle;
    vector<int>ans;
    auto dfs = [&] (int nod, auto self) -> void{
        while(!G[nod].empty()) {
            auto [ne, idx] = G[nod].back();
            G[nod].pop_back();
            if(v[idx] == 0) {
                v[idx] = 1;
                self(ne, self);
            }
        }
        ans.push_back(nod);
    };
    dfs(1, dfs);
 
    for(int i = 0; i < M; i++) {
        ok &= v[i];
    }
 
    if(ok == 0) cout << -1;
    else {
        ans.pop_back();
        for(auto i : ans) cout << i << ' ';
    }
}