Cod sursa(job #3369046)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 17 octombrie 2026 10:55:28
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

const int NMAX = 1e5;
multiset<int> G[NMAX + 1];
int grad[NMAX + 1], vis[NMAX + 1];
vector<int> sol;
//G[x].pb({y, i})

void dfs(int node) {
    vis[node] = 1;
    for(auto vec : G[node]) {
        //int vec = it.first;
        if(!vis[vec]) {
            dfs(vec);
        }
    }
}

void euler(int node) {
    while(G[node].size() > 0) {
        int vec = (*G[node].begin());
        G[node].erase(G[node].find(vec));
        G[vec].erase(G[vec].find(node));
        euler(vec);
    }
    sol.push_back(node);
}


int main() {
    //ifstream cin("ciclueuler.in");
    //ofstream cout("ciclueuler.out");
	int n, m;
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        int x, y;
        cin >> x >> y;
        grad[x]++;
        grad[y]++;
        G[x].insert(y);
        G[y].insert(x);
    }
    dfs(1);
    bool ok = 1;
    for(int i = 1; i <= n; i++) {
        if(grad[i] % 2 != 0 || !vis[i]) {
            ok = 0;
        }
    }
    if(ok == 0) {
        cout << -1;
    } else {
        euler(1);
        for(int i = 0; i < sol.size() - 1; i++) {
            cout << sol[i] << ' ';
        }
    }
}