Cod sursa(job #3361906)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 29 iulie 2026 19:04:06
Problema Ciclu Eulerian Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

#define USE_STD_IO 0
#if USE_STD_IO
    #define fin cin
    #define fout cout
#else
    ifstream fin("ciclueuler.in");
    ofstream fout("ciclueuler.out");
#endif

struct Muchie {
    int vec, idx;
};

vector<Muchie> gr[500002];
int n, m, i, x, y;
bool viz[500002];

int nr = 0;

static inline void Euler(int nod) {
    if(m != nr++) fout << nod << ' ';
    while(!gr[nod].empty()) {
        Muchie mch = gr[nod].back();
        gr[nod].pop_back();

        if(!viz[mch.idx]) {
            viz[mch.idx] = true;
            Euler(mch.vec);
        }
    }
}


int main() {
    #if USE_STD_IO
        ios_base::sync_with_stdio(false);
    #endif
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> n >> m;
    for(i = 1; i <= m; i++) {
        fin >> x >> y;
        gr[x].push_back({y, i});
        gr[y].push_back({x, i});
    }

    int start = 1, gres = 0;
    for(i = 1; i <= n; i++) {
        if(1 & gr[i].size()) {
            gres++;
            start = i;
        }
    }

    if(0 != gres && 2 != gres) {
        fout << "-1";
        return 0;
    }

    Euler(start);

    return 0;
}