Pagini recente » Cod sursa (job #1461314) | Cod sursa (job #1323677) | Autentificare | Cod sursa (job #1262964) | Cod sursa (job #1484789)
#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 sterg(int a,int b)
{
for(vector<int>::iterator ii=g[a].begin();ii!=g[a].end();++ii)
if(*ii==b)
{
g[a].erase(ii,ii+1);
break;
}
}
void rezolv()
{
int nodc,noda;
nodc=noda=1;
st[++vf]=1;
while(num<m)
{
nodc=st[vf];
while(g[nodc].size())
{
vector<int>::iterator ii=g[nodc].begin();
noda=nodc;
nodc=*ii;
st[++vf]=nodc;
sterg(nodc,noda);
sterg(noda,nodc);
}
while(vf&&g[st[vf]].size()==0)
printf("%d ",st[vf--]),num++;
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
if(verif_conex()&&verif_grad())
rezolv();
else
printf("-1");
return 0;
}