Pagini recente » Cod sursa (job #939006) | Cod sursa (job #752561) | Cod sursa (job #3005483) | Cod sursa (job #2440441) | Cod sursa (job #1920820)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
const int NMAX = 100007;
const int MMAX = 500007;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector < int > sol;
int poz[NMAX], ap[NMAX], viz[NMAX];
pair < int, int > edges[MMAX];
vector < int > v[NMAX];
int n, m;
void euler(int node) {
while(poz[node] < v[node].size()) {
if(viz[v[node][poz[node]]] == 1) {
++poz[node];
}
else {
int w = v[node][poz[node]];
int vecin = edges[w].first + edges[w].second - node;
++poz[node];
viz[w] = 1;
euler(vecin);
}
}
sol.push_back(node);
}
int main() {
cin >> n >> m;
for(int i = 1; i <= m; ++i) {
int a, b;
cin >> a >> b;
edges[i] = make_pair(a, b);
v[a].push_back(i);
v[b].push_back(i);
++ap[a];
++ap[b];
}
for(int i = 1; i <= n; ++i) {
if(ap[i] % 2 == 1) {
cout << -1;
return 0;
}
}
euler(1);
for(int i = sol.size() - 1; i >= 1; --i) {
cout << sol[i] << " ";
}
return 0;
}