Pagini recente » Cod sursa (job #1729182) | Cod sursa (job #348078) | Cod sursa (job #1797874) | Cod sursa (job #1056565) | Cod sursa (job #1599481)
#include <cstdio>
#include <vector>
#define nmax 100005
using namespace std;
vector<int> g[nmax];
int grd[nmax],viz[nmax],st[5*nmax],n,m,vf,num,xx[5*nmax],nrxx;
void citire()
{
int a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
g[a].push_back(b);
grd[a]++;
g[b].push_back(a);
grd[b]++;
}
}
void dfs(int k)
{
viz[k]=1;
for(vector<int>::iterator ii=g[k].begin();ii!=g[k].end();++ii)
if(viz[*ii]==0)
dfs(*ii);
}
bool verif_grad()
{
for(int i=1;i<=n;i++)
if(grd[i]%2==1)
return 0;
return 1;
}
bool verif_conex()
{
dfs(1);
for(int i=1;i<=n;i++)
if(viz[i]==0)
return 0;
return 1;
}
void rezolv()
{
int k;
bool ok;
st[++vf]=1;
while(vf)
{
k=st[vf];
ok=0;
for(vector<int>::iterator ii=g[k].begin();ii!=g[k].end();++ii)
{
ok=1;
st[++vf]=*ii;
int num=*ii;
g[k].erase(ii,ii+1);
for(vector<int>::iterator jj=g[num].begin();jj!=g[num].end();++jj)
if(*jj==k)
{
g[num].erase(jj,jj+1);
break;
}
break;
}
if(!ok)
xx[++nrxx]=st[vf--];
}
for(int i=1;i<nrxx;i++)
printf("%d ",xx[i]);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(verif_conex()&&verif_grad())
rezolv();
else
printf("-1");
return 0;
}