#include <fstream>
using namespace std;
int v[100],n;
bool a[100][100];
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
bool viz[100];
int grad[100];
void citire()
{
int m;
f>>n>>m;
int x,y;
while(f>>x>>y)
{
a[x][y]=a[y][x]=1;
viz[x]=viz[y]=1;
}
}
bool viz1[100];
void DF(int k)
{
viz1[k]=1;
for(int i=1;i<=n;i++)
if(a[k][i]==true && viz1[i]==0)
DF(i);
}
bool valid_e(int m,int k)
{
if(v[k-1]==m && k>0)
return 0;
if(k>0 && a[v[k-1]][m]==0)
return 0;
for(int j=0; j<k-1; j++)
if(k>0 && (v[k-1]==v[j] && v[j+1]==m)||(v[k-1]==v[j+1] && v[j]==m))
return 0;
return 1;
}
void grade()
{
for(int i=1;i<=n;i++)
{
int s=0;
for(int j=1;j<=n;j++)
s+=a[i][j];
grad[i]=s;
}
}
bool corect(int k)
{
if(v[0]!=v[k])
return 0;
for(int i=0;i<k;i++)
{
grad[v[i]]--;
grad[v[i+1]]--;
}
for(int i=1;i<=n;i++)
if(grad[i]!=0)
return 0;
return 1;
}
void generare_euleriene(int k)
{
for(int i=1;i<=n;i++)
if(valid_e(i,k))
{
v[k]=i;
grade();
if(corect(k))
{
for(int i=0;i<=k;i++)
g<<v[i]<<" ";
break;
}
else
generare_euleriene(k+1);
}
}
int main()
{
citire();
int p=1;
for(int i=1; i<=n; i++)
if(viz[i]==0)
{
p=0;
g<<"-1";
}
if(p==1)
{
grade();
int q=1;
grade();
for(int i=1;i<=n;i++)
if(grad[i]%2==1)
{
q=0;
g<<"-1";
break;
}
if(q==1)
{
DF(1);
for(int i=1;i<=n;i++)
if(viz1[i]==0)
{
q=0;
g<<"-1";
break;
}
if(q==1)
generare_euleriene(0);
}
}
}