Pagini recente » Cod sursa (job #2973886) | Cod sursa (job #1031633) | Cod sursa (job #1475397) | Cod sursa (job #835175) | Cod sursa (job #1124864)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m, grad[100005];
vector<int> g[100005], res;
pair<int, int> edge[500005];
bool vis[500005];
stack<int> sk;
inline void euler()
{
sk.push(1);
while (sk.size())
{
int node = sk.top(), ok = 1;
while (g[node].size())
{
int next = g[node].back(); g[node].pop_back();
if (!vis[next])
{
vis[next] = true;
sk.push(edge[next].first + edge[next].second - node);
ok = 0;
break;
}
}
if (ok)
{
res.push_back(node);
sk.pop();
}
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; ++i)
{
fin >> edge[i].first >> edge[i].second;
++grad[edge[i].first];
++grad[edge[i].second];
g[edge[i].first].push_back(i);
g[edge[i].second].push_back(i);
}
for (int i = 1; i <= n; ++i)
if (grad[i] % 2)
{
fout << "-1\n";
return 0;
}
euler();
for (size_t i = 0; i < res.size() - 1; ++i)
fout << res[i] << ' ';
fout << '\n';
fin.close();
fout.close();
}