Pagini recente » Cod sursa (job #1832483) | Cod sursa (job #2094774) | Cod sursa (job #2824116) | Cod sursa (job #720148) | Cod sursa (job #2345519)
#include <bits/stdc++.h>
#define all(cont) cont.begin(), cont.end()
#define pb push_back
#define fi first
#define se second
#define DEBUG(x) cerr << (#x) << ": " << (x) << '\n'
#define close() f.close(); g.close(); return 0
using namespace std;
typedef pair <int, int> pii;
typedef vector <int> vi;
typedef long long ll;
typedef unsigned long long ull;
template <class T> void uin (T &a, T b) {a = min (a, b);}
template <class T> void uax (T &a, T b) {a = max (a, b);}
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL_DEFINE
freopen (".in", "r", stdin);
#endif
int n, m;
f >> n >> m;
vector <vi> adj (n + 2);
vi from (m + 2, 0), to (m + 2, 0);
for (int i = 1; i <= m; ++i) {
int u, v;
f >> u >> v;
adj[u].pb (i);
adj[v].pb (i);
from[i] = u;
to[i] = v;
}
for (int i = 1; i <= n; ++i) {
if ((adj[i].size() & 1)) {
g << "-1\n";
close();
}
}
function <int (int, int)> other = [&] (int node, int edge) {
return (node ^ from[edge] ^ to[edge]);
};
int last = -1;
vi stk;
stk.pb (1);
vector <bool> vis (m + 2, false);
while (!stk.empty()) {
int node = stk.back();
if (!adj[node].empty()) {
int edge = adj[node].back();
adj[node].pop_back();
if (!vis[edge]) {
vis[edge] = true;
stk.pb (other (node, edge));
}
} else {
if (last != -1) g << last << ' ';
last = node;
stk.pop_back();
}
}
close();
#ifdef LOCAL_DEFINE
cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}