Cod sursa(job #3361294)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 22 iulie 2026 20:54:53
Problema Ciclu Eulerian Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <stack>
#define int long long
using namespace std;

ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");

struct Edge {
    int to;
    int id;
};

int n,m;
vector<Edge> adj[100005];
int degree[100005];
bool used[500005];

signed main() {
    cin>>n>>m;
    for (int i=1; i<=m; ++i) {
        int u, v;
        cin>>u>>v;
        adj[u].push_back({v, i});
        adj[v].push_back({u, i});
        degree[u]++;
        degree[v]++;
    }
    for (int i=1; i<=n; ++i) {
        if (degree[i]%2!=0) {
            cout<<-1;
            return 0;
        }
    }
    vector<int> st;
    vector<int> path;
    st.push_back(1);
    while (!st.empty()) {
        int u=st.back();
        while (!adj[u].empty() && used[adj[u].back().id]) {
            adj[u].pop_back();
        }
        if (!adj[u].empty()) {
            Edge e=adj[u].back();
            adj[u].pop_back();
            used[e.id]=true;
            st.push_back(e.to);
        } else {
            path.push_back(u);
            st.pop_back();
        }
    }
    if ((int)path.size()-1<m) {
        cout<<-1;
        return 0;
    }
    for (int i=0; i<m; ++i) {
        cout<<path[i]<<(i==m-1 ? "" : " ");
    }
}