Pagini recente » Cod sursa (job #1796077) | Cod sursa (job #1253824) | Cod sursa (job #340697) | Cod sursa (job #2696847) | Cod sursa (job #2475516)
#include <bits/stdc++.h>
using namespace std;
const int MAX_V = 100005;
const int MAX_M = 500005;
int n, m;
vector < pair < int, int > > G[MAX_V];
vector < int > ans;
bool vis[MAX_M];
void dfs(int u) {
while (int(G[u].size()) > 0) {
int v = G[u].back().first;
int edge = G[u].back().second;
G[u].pop_back();
if (vis[edge] == 0) {
vis[edge] = true;
dfs(v);
}
}
ans.push_back(u);
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; ++i) {
int u, v;
scanf("%d %d", &u, &v);
G[u].push_back({v, i});
G[v].push_back({u, i});
}
bool ok = true;
for (int i = 1; i <= n; ++i) {
ok &= (int(G[i].size()) % 2 == 0);
}
if (ok == 0) {
printf("-1\n");
return 0;
}
dfs(1);
for (int i = 0; i < ans.size() - 1; ++i) {
printf("%d ", ans[i]);
}
return 0;
}