Cod sursa(job #2872495)

Utilizator SlavicGGuzun Veaceslav SlavicG Data 17 martie 2022 10:33:24
Problema Ciclu Eulerian Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include "bits/stdc++.h"
using namespace std;
 
#define ll long long
 
#define       forn(i,n)              for(int i=0;i<n;i++)
#define          all(v)              v.begin(), v.end()
#define         rall(v)              v.rbegin(),v.rend()
 
#define            pb                push_back
#define          sz(a)               (int)a.size()
 
const int N = 1e5 + 10;
vector<int> adj[N];
int a[N], b[N];
bool vis[N];
vector<int> ans;
void dfs(int u) {
    while(sz(adj[u])) {
        int i = adj[u].back();
        adj[u].pop_back();
        if(!vis[i]) {
            vis[i] = true;
            int A = a[i], B = b[i];
            if(A == u) {
                dfs(B);
            } else {
                dfs(A);
            }
        }
    }
    ans.pb(u);
}
void solve() {
    int n, m;
    cin >> n >> m;
    for(int i = 0;i < m; ++i) {
        int u, v; cin >> u >> v;
        --u, --v;
        adj[u].pb(i);
        adj[v].pb(i);
        a[i] = u, b[i] = v;
    }


    for(int i = 0;i < n; ++i) {
        if(sz(adj[i]) & 1) {
            cout << "-1\n";
            return;
        }
    }
    dfs(0);
    ans.pop_back();
    for(auto x: ans) {
        cout << x + 1 << " ";
    }
    cout << "\n";
}
 
int32_t main() {
    freopen("ciclueuler.in", "r", stdin);
    freopen("ciclueuler.out", "w", stdout);
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t = 1;
    //cin >> t;
    while(t--) {
        solve();
    }
}