Pagini recente » Cod sursa (job #2370264) | Cod sursa (job #74110) | Cod sursa (job #2182424) | Cod sursa (job #2809978) | Cod sursa (job #2755908)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int NMAX = 100000;
const int MMAX = 500000;
struct muchie {
int nod1, nod2;
muchie(int _nod1 = 0, int _nod2 = 0) : nod1(_nod1), nod2(_nod2) {}
int other(int nod) {
return nod1 + nod2 - nod;
}
};
int n, m;
int grad[NMAX + 5];
bool uz[MMAX + 5];
muchie muchii[MMAX + 5];
vector<int> v[NMAX + 5];
void read() {
int x, y;
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
muchii[i] = muchie(x, y);
v[x].push_back(i);
v[y].push_back(i);
grad[x]++;
grad[y]++;
}
}
bool eulerian() {
for(int i = 1; i <= n; i++)
if(grad[i] % 2 == 1)
return false;
return true;
}
void dfs(int nod) {
for(int m_idx: v[nod])
if(!uz[m_idx]) {
uz[m_idx] = true;
dfs(muchii[m_idx].other(nod));
}
printf("%d ", nod);
}
void find_eulerian_cycle() {
dfs(1);
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
read();
if(eulerian())
find_eulerian_cycle();
else
printf("-1");
return 0;
}