Pagini recente » Cod sursa (job #1479844) | Cod sursa (job #2351982) | Monitorul de evaluare | Cod sursa (job #1103645) | Cod sursa (job #3353455)
#include <iostream>
#include <queue>
#include <fstream>
#include <map>
#include <set>
#include <cstring>
#include <stack>
#include <ctime>
#include <cstdlib>
#define N_MAX 100005
#define MOD 666013
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n, m;
multiset<int> edges[N_MAX];
vector<int> ciclu;
int main()
{
in >> n >> m;
int x, y;
for (int i = 1; i <= m; i++) {
in >> x >> y;
edges[x].insert(y);
edges[y].insert(x);
}
stack<int> nodes;
nodes.push(1);
while (!nodes.empty()) {
int nod = nodes.top();
if (edges[nod].empty()) {
nodes.pop();
ciclu.push_back(nod);
continue;
}
int w = *(edges[nod].begin());
auto it = edges[nod].begin();
edges[nod].erase(it);
it = edges[w].find(nod);
edges[w].erase(it);
nodes.push(w);
}
for (int i = 1; i <= n; i++) {
if (!edges[i].empty()) {
out << -1;
return 0;
}
}
for (int i = 0; i < ciclu.size() - 1;i++) {
out << ciclu[i] << ' ';
}
return 0;
}