Pagini recente » Cod sursa (job #2955883) | Cod sursa (job #1292801) | Cod sursa (job #2216805) | Cod sursa (job #1799506) | Cod sursa (job #1131479)
#include<stdio.h>
#include<list>
using namespace std;
#define nmax 100005
#define mmax 500005
int n, m, i, x, y, inc, sf, ac, urm, nod, nraf;
int gr[nmax], st[mmax], co[nmax];
list <int> ma[nmax];
list <int> ::iterator it;
bool viz[nmax], ok;
void citire()
{
scanf("%ld %ld",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%ld %ld",&x,&y);
ma[x].push_back(y); gr[x]++;
ma[y].push_back(x); gr[y]++;
}
}
void bfs()
{
co[1]=inc=sf=viz[1]=1;
while (inc<=sf)
{
x=co[inc]; inc++;
for (it=ma[x].begin();it!=ma[x].end();it++)
if (!viz[*it])
{
co[++sf]=*it;
viz[*it]=1;
}
}
}
void verificare()
{
ok=1;
for (i=1;i<=n;i++)
ok&=viz[i]&(gr[i]%2==0);
}
void sterge_muchia()
{
ma[ac].erase(ma[ac].begin());
for (it=ma[urm].begin();it!=ma[urm].end();it++)
if (*it==ac)
{ ma[urm].erase(it); break; }
}
void extinde()
{
ac=nod;
while (1)
{
st[++sf]=ac;
if (ma[ac].size()==0)
break;
urm=*ma[ac].begin();
sterge_muchia();
ac=urm;
}
}
void rezolvare()
{
sf=0;
st[++sf]=1;
while (sf>0)
{
nod=st[sf]; sf--;
if (ma[nod].size()>0)
extinde();
else
{
nraf++;
if (nraf<=m)
printf("%ld ",nod);
else
break;
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
bfs();
verificare();
if (!ok)
printf("-1\n");
else
rezolvare();
return 0;
}