#include<cstdio>
struct Nod
{int info;
Nod *urm;};
int a[500005],b[500005],d[500005],i,n,m,k,w[100001],*g[100001],j,c[100001],t;
Nod *l,*r;
void I(Nod *&l)
{int e,i,k,t,j;
Nod *p=l,*r,*q=l->urm;
do
{for(k=-1,i=0;i<w[p->info]&&k==-1;i++)
j=g[p->info][i],k=i;
for(e=k;e<w[p->info]-1;e++)
g[p->info][e]=g[p->info][e+1];
w[p->info]--;
for(k=-1,t=0;t<w[j]&&k==-1;t++)
if(g[j][t]==p->info)
k=t;
for(e=k;e<w[j]-1;e++)
g[j][e]=g[j][e+1];
w[j]--;
r=new Nod;
r->info=j,r->urm=NULL,p->urm=r,p=r;}
while(r->info!=l->info);
p->urm=q;}
int A(Nod *&l)
{Nod *p=l;
while(p)
{if(w[p->info]>0)
{I(p);
return 1;}
p=p->urm;}
return 0;}
int P()
{for(int i=1;i<=n;i++)
if(w[i]%2)
return 0;
return 1;}
void D(int k)
{int i,sp=1,st[100001];
st[1]=k,c[k]=1;
while(sp)
{j=st[sp--];
for(i=0;i<w[j];i++)
if(!c[g[j][i]])
c[g[j][i]]=1,st[++sp]=g[j][i];}}
int O()
{D(1);
for(int i=1;i<=n;i++)
if(!c[i])
return 0;
return 1;}
int main()
{freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d",&a[i],&b[i]),w[a[i]]++,w[b[i]]++;
for(i=1;i<=n;w[i++]=0)
g[i]=new int[w[i]];
for(i=1;i<=m;i++)
g[a[i]][w[a[i]]++]=b[i],g[b[i]][w[b[i]]++]=a[i];
if(!O()||!P())
printf("-1");
else
{l=new Nod;
l->info=1,l->urm=NULL;
while(A(l));
for(r=l->urm;r;r=r->urm)
printf("%d ",r->info);}
return 0;}