Cod sursa(job #3344126)

Utilizator Roberto_CChirvasitu Roberto Roberto_C Data 1 martie 2026 13:51:16
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define ll long long

const int NMAX = 1e5;
int n,m;
vector<pii>v[NMAX+1];
int rang[NMAX+1];
bitset<NMAX+1>vap;
vector<int>euler;
void read(){
    cin >> n >> m;
    for(int i = 1; i <= m; i++){
        int st,dr;
        cin >> st >> dr;
        v[st].push_back({dr,i});
        v[dr].push_back({st,i});
        rang[st]++;
        rang[dr]++;
    }
}

void find_eulerian_path(int nod){
    while(!v[nod].empty()){
        auto curr = v[nod].back();
        v[nod].pop_back();

        if(vap[curr.second] == 0){
            vap[curr.second] = 1;
            find_eulerian_path(curr.first);
        }
    }
    euler.push_back(nod);
}

void solve(){
    for(int i = 1; i <= n; i++){
        if(rang[i] & 1){
            cout << -1;
            return;
        }
    }
    find_eulerian_path(1);
    if(euler.size() != m+1)
    {
        cout << -1;
        return;
    }
    for(int i : euler)
        cout << i << ' ';
}

int main() {
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    read();
    solve();
    return 0;
}