Pagini recente » Cod sursa (job #1020498) | Cod sursa (job #2890190) | Cod sursa (job #2392109) | Cod sursa (job #1990071) | Cod sursa (job #1870666)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <vector>
#include <algorithm>
#define In "ciclueuler.in"
#define Out "ciclueuler.out"
FILE *fin = fopen(In, "r"), *fout = fopen(Out, "w");
#define BUF 1 << 17
int pos = BUF;char buf[BUF];
inline char next() {
if(pos == BUF)
fread(buf, 1, BUF, fin), pos = 0;
return buf[pos++];
}
inline int read() {
int x = 0, semn = 1;
char ch = next();
while(!isdigit(ch) && ch != '-')
ch = next();
if(ch == '-')
ch = next(), semn = -1;
while(isdigit(ch))
x = x * 10 + ch - '0', ch = next();
return x * semn;
}
#define NMAX 100001
int N, M;
std::vector <int> G[NMAX + 1];
std::vector <int> Sol;
std::vector <int> stk;
inline void euler(int nod) {
stk.push_back(nod);
while(!stk.empty()) {
int nod = stk.back();
while(G[nod].size()) {
int nxt = G[nod].back();
G[nod].pop_back();
G[nxt].erase(find(G[nxt].begin(), G[nxt].end(), nod));
stk.push_back(nxt);
nod = nxt;
}
Sol.push_back(stk.back());
stk.pop_back();
}
}
int main() {
N = read(), M = read();
for(int i = 0;i < M;i++) {
int x, y;
x = read(), y = read();
G[x].push_back(y);
G[y].push_back(x);
}
for(int i = 1;i <= N;i++) {
if(G[i].size() & 1) {
fprintf(fout, "-1\n");
return 0;
}
}
euler(1);
for(int i = 0;i < Sol.size() - 1;i++)
fprintf(fout, "%d ", Sol[i]);
fclose(fin);
fclose(fout);
return 0;
}