//深度遍历
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//记录每个点的度数;是否联通
int degree[10005]={0},odd=0;
vector<int> g[10005],ans;
bool gra[10005][10005]={};
int n,m;
void dfs(int u)
{
for(int j=0;j<g[u].size();j++)
{
int v=g[u][j];
if(gra[u][v])
{
gra[u][v]=gra[v][u]=0;
dfs(v);
}
}
ans.push_back(u);
}
int main(int argc, char** argv)
{
cin>>n>>m;
for(int i=0;i<m;i++)
{
int u,v;
cin>>u>>v;
degree[u]++;
degree[v]++;
g[u].push_back(v);
g[v].push_back(u);
gra[u][v]=gra[v][u]=true;
}
for(int i=1;i<=n;i++)
{
//无向图的欧拉回路的充分必要条件:所有的顶点都是偶数度
//无向图的欧拉通路:图联通:只有两个顶点位奇数,其余为偶数度
if(degree[i]%2==1)
odd++;
}
//不连通,结束
if(!(odd==0||(odd==2&°ree[1]%2)))
{
cout<<-1;
return 0;
}
//对每个点连接的序号排序
for(int i=1;i<=n;i++)
{
sort(g[i].begin(),g[i].end());
}
dfs(1);
//一定要判断是否是连通图, 不然是错的.(判断输出点数是否为m + 1即可)
if(ans.size()!=m+1)
{
//m条边会经过
cout<<-1;
return 0;
}
for(int i=ans.size()-1;i>=0;i--)
{
cout<<ans[i]<<" ";
}
return 0;
}