Pagini recente » Cod sursa (job #408383) | Cod sursa (job #774212) | Cod sursa (job #969399) | Cod sursa (job #1411630) | Cod sursa (job #1863433)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <deque>
#define NMAX 100001
#define NODES 500010
#define pb push_back
using namespace std;
FILE *f = freopen("ciclueuler.in", "r", stdin);
FILE *g = freopen("ciclueuler.out", "w", stdout);
vector <int> G[NMAX];
deque <int> q;
int rez[NODES];
int n, m, lg;
void read() {
scanf("%d%d", &n, &m);
for(int i = 1; i<=m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
G[x].pb(y);
G[y].pb(x);
}
}
int has_cycle()
{
for(int i = 1; i<=n; i++)
if(G[i].size() % 2 == 1) return 0;
return 1;
}
void solve() {
q.pb(1);
while(!q.empty()) {
int nod = q.back();
if(!G[nod].empty()) {
int new_node = G[nod].back();
G[nod].pop_back();
G[new_node].erase(find(G[new_node].begin(), G[new_node].end(), nod));
q.pb(new_node);
}
else {
rez[++lg] = nod;
q.pop_back();
}
}
}
void write_sol() {
if(has_cycle()) {
solve();
for(int i = 1; i<lg - 1; i++)
printf("%d ", rez[i]);
}
else printf("%d", -1);
}
int main() {
read();
solve();
write_sol();
return 0;
}