Pagini recente » Cod sursa (job #490276) | Cod sursa (job #3221862) | Cod sursa (job #1191265) | Cod sursa (job #1250290) | Cod sursa (job #1599450)
#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;
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,cv=-1;
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)
{
if(st[vf]!=cv)
{
if(cv==-1)
cv=st[vf];
printf("%d ",st[vf--]);
}
else
vf--;
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(verif_conex()&&verif_grad())
rezolv();
else
printf("-1");
return 0;
}