Cod sursa(job #3369044)

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

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

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

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

void euler(int node) {
    while(G[node].size() > 0) {
        pair<int, int> vec = (*G[node].begin());
        G[node].erase({vec.first, vec.second});
        G[vec.first].erase({node, vec.second});
        euler(vec.first);
    }
    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, i});
        G[y].insert({x, i});
    }
    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] << ' ';
        }
    }
}