Pagini recente » Cod sursa (job #2368704) | Cod sursa (job #2526528) | Cod sursa (job #385897) | Cod sursa (job #435722) | Cod sursa (job #2151347)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#define N 100005
#define M 500005
#define f first
#define s second
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector<pair<int,int> > v[N];
bitset<M> vz;
int n, m, g[N], sol[N], szSol;
void dfs(int node) {
while (v[node].size() > 0) {
int nextNode = v[node].back().f, edge = v[node].back().s;
v[node].pop_back();
if (!vz[edge]) {
vz[edge] = 1;
dfs(nextNode);
}
}
szSol++;
sol[szSol] = node;
}
int main() {
int x, y;
in >> n >> m;
for (int i = 1; i <= m; i++) {
in >> x >> y;
v[x].push_back(make_pair(y, i));
v[y].push_back(make_pair(x, i));
if (x != y) {
g[x]++;
g[y]++;
}
}
for (int i = 1; i <= n; i++) {
if (g[i] & 1) {
out << -1;
return 0;
}
}
dfs(1);
for (int i = 1; i < szSol; i++) {
out << sol[i] << " ";
}
return 0;
}