Cod sursa(job #3313707)

Utilizator iulia_morariuIuli Morariu iulia_morariu Data 5 octombrie 2025 22:31:24
Problema Ciclu Eulerian Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <algorithm>
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
#include <stack>
#include <cmath>
#include <set>
// #include <bits/stdc++.h>
#define in  fin
#define out fout
#define mkp make_pair

using namespace std;

ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");

// lowkey nu am somn sooo in loc sa vegetez ma apuc de tema

vector<int> g[100001];
set< pair<int, int> > alr_bro; // puse deja
// 100% nu e cel mai eficient da mere
vector<int> finally;

void euler_died_for_this(int nod){
    for(const int &x : g[nod]){
        if(alr_bro.find(mkp( min(nod, x), max(nod, x) )) != alr_bro.end()) continue;
        alr_bro.insert(mkp( min(nod, x), max(nod, x) ));
        euler_died_for_this(x);
    }
    finally.push_back(nod);
}

signed main(){
    ios_base::sync_with_stdio(false);
    in.tie(NULL);

    int n, m; in >> n >> m;
    for(int i = 0; i < m; i++){
        int x, y; in >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    
    bool pudak = 0;
    for(int i = 1; i <= n; i++){
        if(g[i].size() % 2 == 1) pudak = 1;
    }
    if(pudak) out << "-1\n";
    else{
        euler_died_for_this(1);
        for(const int &x : finally) out << x << " ";
    }

    return 0;
}