Pagini recente » Cod sursa (job #2367660) | Cod sursa (job #1667013) | Cod sursa (job #2658860) | Cod sursa (job #2394445) | Cod sursa (job #2547197)
#define MAX_N 100000
#define MAX_M 500000
#include <fstream>
#include <vector>
#include <bitset>
#include <utility>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m;
pair<int, int> E[MAX_M + 1];
vector<int> R, G[MAX_N + 1];
bool Eulerian();
void Df(int nod);
int main()
{
fin >> n >> m;
for (int i = 1, x, y; i <= m; ++i)
{
fin >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
E[i] = { x, y };
}
if (!Eulerian())
{
fout << "-1";
}
else
{
Df(1);
for (int nod : R)
{
fout << nod << ' ';
}
}
fin.close();
fout.close();
return 0;
}
bool Eulerian()
{
for (int i = 1; i <= n; ++i)
{
if (G[i].size() & 1)
{
return false;
}
}
return true;
}
bitset<MAX_M + 1> F;
void Df(int nod)
{
for (int muchie : G[nod])
{
if (!F[muchie])
{
F[muchie] = true;
if (E[muchie].first == nod)
{
Df(E[muchie].second);
}
else
{
Df(E[muchie].first);
}
}
}
R.push_back(nod);
}