Pagini recente » Cod sursa (job #3148179) | Cod sursa (job #2659051) | Cod sursa (job #1664012) | Cod sursa (job #2713657) | Cod sursa (job #2367134)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
const int MAXM = 5e5 + 10;
vector< pair< int, int > > gr[MAXN];
stack< int > dfs;
bool viz[MAXM];
int deg[MAXN];
int main () {
#ifdef HOME
freopen("input", "r", stdin);
#define f cin
#define g cout
#else
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
#endif // HOME
int n, m;
f >> n >> m;
for(int i = 0; i < m; ++i) {
int a, b;
f >> a >> b;
gr[a].emplace_back(b, i);
gr[b].emplace_back(a, i);
deg[a] ++;
deg[b] ++;
}
for(int i = 1; i <= n; ++i) {
if(!deg[i] || (deg[i]&1)) {
g << -1;
return 0;
}
}
dfs.push(1);
vector< int > ans;
while(dfs.size()) {
int node = dfs.top();
if(gr[node].size()) {
int x , e;
tie(x, e) = gr[node].back();
gr[node].pop_back();
if(!viz[e]) {
viz[e] = true;
dfs.push(x);
}
} else {
dfs.pop();
ans.emplace_back(node);
}
}
ans.pop_back();
for(auto &x : ans) g << x << ' ';
return 0;
}