#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,x,y,ct,r,nr,t,k,im,gr[100005],ciclu[100005],sol[500005];
struct arc{
int nod,poz;
};
vector <arc> g[100005];
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
if(x!=y){
g[x].push_back({y,g[y].size()});
g[y].push_back({x,g[x].size()-1});
}
else{
g[x].push_back({y,g[x].size()});
}
gr[x]++;
gr[y]++;
}
for(i=1;i<=n;i++)
if(gr[i]%2==1){
fout<<-1;
return 0;
}
ciclu[++k]=1;
while(k){
if(!gr[ciclu[k]]){
while(!gr[ciclu[k]] && k>0)
sol[++t]=ciclu[k--];
}
else{
for(i=0;i<g[ciclu[k]].size();i++){
int nou=g[ciclu[k]][i].nod;
int poz=g[ciclu[k]][i].poz;
if(nou!=-1){
if(nou!=ciclu[k]){
g[ciclu[k]][i].nod=-1;
g[nou][poz].nod=-1;
}
else
g[ciclu[k]][i].nod=-1;
gr[ciclu[k]]--;
gr[nou]--;
ciclu[++k]=nou;
break;
}
}
}
}
if(t!=m+1){
fout<<-1;
return 0;
}
for(i=t;i>1;i--)
fout<<sol[i]<<' ';
return 0;
}