Pagini recente » Cod sursa (job #749601) | Cod sursa (job #520346) | Cod sursa (job #447184) | Cod sursa (job #3230462) | Cod sursa (job #2667816)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <iterator>
#define NMAX 100003
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
multiset <int> nodes[NMAX];
multiset <int> :: iterator it;
int n, sizeOf[NMAX];
long long m;
vector <int> result;
void read(){
f >> n >> m;
int x, y;
for (int i = 1; i <= m; i++){
f >> x >> y;
nodes[x].insert(y);
sizeOf[x]++;
sizeOf[y]++;
if (x != y){
nodes[y].insert(x);
}
}
}
void euler(int node){
it = nodes[node].begin();
while (it != nodes[node].end()){
int next = *it;
//Erase the current node
nodes[node].erase(nodes[node].find(next));
if (next != node){
nodes[next].erase(nodes[next].find(node));
}
euler(next);
it = nodes[node].begin();
}
result.push_back(node);
}
int main()
{
read();
for (int i = 1; i <= n; i++) {
if (sizeOf[i] & 1) {
g << "-1\n";
return 0;
}
}
euler(1);
for (int i = result.size() - 1; i > 0; i--)
g << result[i] << " ";
return 0;
}