Pagini recente » Cod sursa (job #1818368) | Cod sursa (job #2079228) | Cod sursa (job #2148170) | Cod sursa (job #485043) | Cod sursa (job #2216289)
#include <cstdio>
#include <set>
#include <utility>
#include <vector>
#define NMAX 100000
static std::vector<std::pair<int, int> > adj[NMAX+1];
static std::set<std::pair<int, int> > deleted[NMAX+1];
static std::vector<int> sol;
static int deg[NMAX+1];
static inline void ciclueuler(int v)
{
for (std::vector<std::pair<int, int> >::iterator it = adj[v].begin(); it != adj[v].end(); it++) {
if (deleted[v].count(*it) == 0) {
deleted[v].insert(*it);
deleted[it->first].insert(std::make_pair(v, it->second));
ciclueuler(it->first);
}
}
sol.push_back(v);
}
int main()
{
int n, m, u, v;
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d %d", &n, &m);
while (m--) {
scanf("%d %d", &u, &v);
adj[u].push_back(std::make_pair(v, m));
deg[u]++;
deg[v]++;
if (u != v) {
adj[v].push_back(std::make_pair(u, m));
deg[u]++;
deg[v]++;
}
}
for (v = 1; v <= n; v++) {
if (deg[v] % 2) {
puts("-1");
return 0;
}
}
ciclueuler(1);
for (n = 0; n < sol.size() - 1; n++) {
printf("%d ", sol[n]);
}
return 0;
}