Pagini recente » Cod sursa (job #1297204) | Cod sursa (job #1433218) | Cod sursa (job #2437922) | Cod sursa (job #2531291) | Cod sursa (job #2924700)
#include<iostream>
#include<vector>
#include<stack>
#include<fstream>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int nmax = 100000;
int n, m;
vector<pair<int, int>> g[nmax + 5];
bool visited[5 * nmax + 5];
int grad[nmax + 1];
vector<int>euler;
int main()
{
in >> n >> m;
int u, v;
for (int i = 1; i <= m; i++)
{
in >> u >> v;
g[u].push_back(make_pair(v, i));
g[v].push_back(make_pair(u, i));
grad[u]++;
grad[v]++;
}
bool noCycle = false;
for (int i = 1; i <= n; i++)
if (grad[i] % 2) noCycle = true;
if (noCycle == true) {
out << -1;
return 0;
}
stack<int>stiva;
stiva.push(1);
while (!stiva.empty()) {
int node = stiva.top();
while (!g[node].empty() && visited[g[node].back().second]) g[node].pop_back();
if (g[node].empty()) stiva.pop(), euler.push_back(node);
else stiva.push(g[node].back().first), visited[g[node].back().second] = 1;
}
for (int i = 0; i < euler.size() - 1; i++)
out << euler[i] << ' ';
return 0;
}