Pagini recente » Cod sursa (job #2531965) | Borderou de evaluare (job #155655) | Cod sursa (job #1439213) | Cod sursa (job #2588989) | Cod sursa (job #2454349)
#include <bits/stdc++.h>
const int BUFFER_SIZE = 1 << 17;
char buffer[BUFFER_SIZE];
int pos = BUFFER_SIZE, nr = 0;
bool visited[(int)(1e5 + 1)];
inline char next() {
if (pos == BUFFER_SIZE) {
fread(buffer, 1, BUFFER_SIZE, stdin);
pos = 0;
}
return buffer[pos++];
}
inline int read() {
int n = 0;
char c = next();
while (!('0' <= c && c <= '9')) {
c = next();
}
while ('0' <= c && c <= '9') {
n = (n << 3) + (n << 1) + (c - '0');
c = next();
}
return n;
}
inline void print(int n) {
char snum[65];
int i = 0;
do {
snum[i++] = n % 10 + '0';
n /= 10;
} while (n);
--i;
while (i >= 0) {
putchar(snum[i--]);
}
putchar(' ');
}
void dfs(int node, std::vector<std::pair<int, int>> v[], int &m) {
while (v[node].size()) {
int current = v[node].back().first;
int neighbor = v[node].back().second;
v[node].pop_back();
if (!visited[neighbor]) {
visited[neighbor] = true;
dfs(current, v, m);
}
}
if (m) print(node), --m;
}
int main() {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int n = read(), m = read();
std::vector<std::pair<int, int>> *v = new std::vector<std::pair<int, int>> [n + 1];
for (int i = 1 ; i <= m ; ++i) {
int src = read(), dest = read();
v[src].emplace_back(std::make_pair(dest, i));
v[dest].emplace_back(std::make_pair(src, i));
}
for (int i = 1 ; i <= n ; ++i) {
if (v[i].size() & 1) {
putchar('-'), putchar('1');
return 0;
}
}
dfs(1, v, m);
delete [] v;
return 0;
}