Pagini recente » Cod sursa (job #816809) | Cod sursa (job #1229329) | Cod sursa (job #275101) | Cod sursa (job #3353558) | Cod sursa (job #3353445)
#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;
stack<int> nodes;
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);
}
for (int i = 1; i <= n;i++) {
if (edges[i].size()%2!=0) {
cout << edges[i].size();
out << -1;
return 0;
}
}
nodes.push(1);
while (!nodes.empty()) {
int nod = nodes.top();
if (edges[nod].empty()) {
ciclu.push_back(nod);
nodes.pop();
continue;
}
int vecin = *(edges[nod].begin());
edges[nod].erase(vecin);
edges[vecin].erase(nod);
nodes.push(vecin);
}
for (auto i : edges) {
if (!i.empty()) {
out << -1;
return 0;
}
}
for (int s : ciclu) {
out << s << ' ';
}
return 0;
}