#include<fstream>
#include<vector>
#include<stack>
#include<cstring>
#define NMAX 100005
#define MMAX 500005
using namespace std;
vector<pair<int, int> > G[NMAX];
stack<int> s;
int n, m, i, x, y;
int g[NMAX];
bool u[MMAX];
int nod;
bool prim;
int fiu, mch;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
void dfs(int nod)
{
u[nod] = 1;
for(int i = 0; i < G[nod].size(); i++)
{
int fiu = G[nod][i].first;
if(u[fiu] == 0)
{
dfs(fiu);
}
}
}
void reinit()
{
memset(u, 0, sizeof(u));
}
void euler()
{
s.push(1);
while(!s.empty())
{
nod = s.top();
if(g[nod] == 0)
{
if(!prim)
{
prim = 1;
}else
{
cout << nod << " ";
}
s.pop();
continue;
}
while(u[G[nod].back().second] == 1)
{
G[nod].pop_back();
}
fiu = G[nod].back().first;
mch = G[nod].back().second;
u[mch] = 1;
g[nod]--;
g[fiu]--;
s.push(fiu);
}
}
int main()
{
cin >> n >> m;
for(i = 1; i <= m; i++)
{
cin >> x >> y;
G[x].push_back(make_pair(y, i));
G[y].push_back(make_pair(x, i));
g[x]++;
g[y]++;
}
dfs(1);
for(i = 1; i <= n; i++)
{
if(g[i] % 2 == 1)
{
cout << "-1";
return 0;
}
if(u[i] == 0 && g[i] > 0)
{
cout << "-1";
return 0;
}
}
reinit();
euler();
return 0;
}