Cod sursa(job #3357937)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 22:01:12
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main() {
    ifstream input("ciclueuler.in");
    ofstream output("ciclueuler.out");

    int n, m;
    input >> n >> m;

    vector<vector<int>> g(n + 1);

    for (int i = 0; i < m; ++i) {
        int x, y;
        input >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    bool ok = true;
    for (int i = 1; i <= n; ++i) {
        if (g[i].size() % 2 == 1) ok = false;
    }

    if (!ok) output << -1;
    else {
        vector<int> st, c;
        st.push_back(1);
        while(!st.empty()) {
            int u = st.back();
            if(!g[u].empty()) {
                int v = g[u].back();
                g[u].pop_back();
                for(int j=0; j<g[v].size(); j++) {
                    if(g[v][j] == u) {
                        swap(g[v][j], g[v].back());
                        g[v].pop_back();
                        break;
                    }
                }
                st.push_back(v);
            } else {
               c.push_back(u);
                st.pop_back();
            }
        }
        if(c.size() != m + 1) {
            output << -1;
        } else {
            for(int i=c.size()-1; i>=0; i--) {
                output << c[i] << " ";
            }
        }
    }
    return 0;
}