#include <cstdio>
#define impinge_puternic push_back
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
vector<int>g[100005];
deque<int>q;
int n,m,nra;
void euler(int x){
vector<int>::iterator it;
int i;
q.impinge_puternic(x);
while(!q.empty()){
x=q.front();
if(g[x].empty()){
q.pop_front();
if(nra<m){
printf("%d ",x);
nra++;}
}
else {
int t=g[x].back();
q.push_front(t);
g[x].pop_back();
for(it=g[t].begin();it!=g[t].end();it++)
if(*it==x){
g[t].erase(it);
break;
}
}
}
}
int i,x,y;
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",&x,&y);
g[x].impinge_puternic(y);
g[y].impinge_puternic(x);
}
bool ok=true;
for(i=1;i<=n;i++)
if(g[x].size()%2!=0){ok=false;break;}
if(ok)euler(1);
else printf("-1");
return 0;
}