Pagini recente » Cod sursa (job #2135186) | Cod sursa (job #2931269) | Cod sursa (job #2373152) | Cod sursa (job #894059) | Cod sursa (job #2550343)
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n,m;
int ind[1000001],urm[1000001],last[100001],nr;
pair <int,int> muchie[500001];
bitset <500001> viz;
int sol[500002],t;
int grad[100001];
void adauga(int nod,int poz)
{
ind[++nr]=poz;
urm[nr]=last[nod];
last[nod]=nr;
}
int stiva[500002],vf;
void Euler(int nod)
{
stiva[++vf]=1;
while(vf)
{
int nod=stiva[vf];
while(last[nod] && viz[ ind[ last[nod] ] ])
last[nod]=urm[ last[nod] ];
if(!last[nod])
{
sol[++t]=nod;
vf--;
}
else
{
int poz=ind[ last[nod] ];
viz[poz]=1;
if(muchie[poz].F==nod)
stiva[++vf]=muchie[poz].S;
else
stiva[++vf]=muchie[poz].F;
}
}
}
bool gradPar()
{
for(int i=1;i<=n;i++)
if(grad[i]%2)
return false;
return true;
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;i++)
{
in>>muchie[i].F>>muchie[i].S;
grad[ muchie[i].F ]++;
grad[ muchie[i].S ]++;
adauga(muchie[i].F,i);
adauga(muchie[i].S,i);
}
if( gradPar()==false )
{
out<<-1;
return 0;
}
Euler(1);
for(int i=1;i<=m;i++)
if(!viz[i])
{
out<<-1;
return 0;
}
for(int i=1;i<=t-1;i++)
out<<sol[i]<<' ';
return 0;
}