Pagini recente » Cod sursa (job #2870860) | Cod sursa (job #1124812) | Cod sursa (job #1042942) | Cod sursa (job #2712367) | Cod sursa (job #2663174)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n, m, vf[1000002], urm[1000002], last[100001], pozb = 1, grad[100001];
bitset <500001> viz;
void adauga(int from, int to)
{
vf[++pozb] = to;
urm[pozb] = last[from];
last[from] = pozb;
}
int stiva[500002], kpozitie[500002], pozs, lista[500002], pozl;
void dfsIter()
{
stiva[++pozs] = 1;
kpozitie[pozs] = last[1];
while(pozs)
{
bool ok = 0;
for(int k = kpozitie[pozs]; k; k = urm[k])
if(viz[k/2] == 0)
{
viz[k/2] = 1;
kpozitie[pozs] = urm[k];
stiva[++pozs] = vf[k];
kpozitie[pozs] = last[vf[k]];
ok = 1;
break;
}
if(ok == 0)
lista[++pozl] = stiva[pozs--];
}
}
int main()
{
in >> n >> m;
for(int i, j, k = 1; k <= m; k++)
{
in >> i >> j;
adauga(i, j);
adauga(j, i);
grad[i]++;
grad[j]++;
}
for(int i = 1; i <= n; i++)
if(grad[i] % 2)
{
out << -1;
return 0;
}
dfsIter();
for(int i = 1; i < pozl; i++)
out << lista[i] << ' ';
return 0;
}