Pagini recente » Rating Dascalu Luca Petru (pisco1234) | Cod sursa (job #294767) | Cod sursa (job #2938504) | Cod sursa (job #1656805) | Cod sursa (job #2259718)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define MAX 100010
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
#define cout g
vector<int> G[MAX];
vector<int> sol;
stack<int> s;
void euler(int node_arg)
{
s.push(node_arg);
while (!s.empty())
{
int node = s.top();
int nnode = G[node][G[node].size() - 1];
G[node].pop_back();
for (int i = (int)G[nnode].size() - 1; i >= 0; --i)
{
if (G[nnode][i] == node)
{
G[nnode][i] = G[nnode][G[nnode].size() - 1];
G[nnode].pop_back();
break;
}
}
s.push(nnode);
continue;
sol.push_back(node);
s.pop();
}
}
int main()
{
int n, m;
f >> n >> m;
for (int i = 0; i < m; ++i)
{
int x, y;
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
bool eulerian = true;
for (int i = 1; i <= n; ++i)
{
if (G[i].size() % 2 != 0)
{
eulerian = false;
}
}
if (eulerian)
{
euler(1);
if (sol.size() - 1 == m)
{
for (int i = 0; i < sol.size() - 1; ++i)
{
cout << sol[i] << ' ';
}
}
else
{
cout << -1 << '\n';
}
}
else
{
cout << -1 << '\n';
}
return 0;
}