#include<cstdio>
#include<stack>
#include<vector>
#define NMAX 100001
#define MMAX 500001
using namespace std;
typedef pair<int,int>pp;
vector<pp>v[NMAX];
stack<int>st;
int viz[MMAX],muc[NMAX];
int n,i,x,y,m;
void DFS(int nod)
{
viz[nod]=1;
for(int i=0;i<v[nod].size();++i)
{
if (viz[v[nod][i].first]==0)
DFS(v[nod][i].first);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
v[x].push_back(pp(y,i));
v[y].push_back(pp(x,i));
muc[x]++;
muc[y]++;
}
int s=0;
for (int i=1;i<=n;++i)
{
if (viz[i]==0)
{
DFS(i);
s=i;
}
}
for (i=1;i<=n;++i)
{
if ((viz[i]==0 && muc[i]>0) || (muc[i]%2==1))
{
printf("-1\n");
return 0;
}
}
for (i=1;i<=n;++i) viz[i]=0;
int valid=1;
st.push(n);
while(!st.empty())
{
x=st.top();
if (muc[x]==0)
{
if (!valid) printf("%d ",x);
valid=0;
st.pop();
continue;
}
while(viz[v[x][v[x].size()-1].second]==1)
v[x].erase(v[x].end()-1);
viz[v[x][v[x].size()-1].second]=1;
st.push(v[x][v[x].size()-1].first);
--muc[x];
--muc[v[x][v[x].size()-1].first];
v[x].erase(v[x].end()-1);
}
return 0;
}