#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#define N 500001
//#define oo 0x3f3f3f3f
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<pair<int, int>>a_e[N];
int n, m;
void Citire_Eulerian()
{
int i, x, y;
for (i = 0; i < m; i++)
{
fin >> x >> y;
a_e[x].push_back(make_pair(y, i));
a_e[y].push_back(make_pair(x, i));
}
}
int CheckEulerian(vector<pair<int, int>>a_e[N], int n)
{
int i, ct = 0;
for (i = 1; i <= n; i++)
if (a_e[i].size() % 2 == 1)
return 0;
return 1;
}
void Solve_Euler(vector<pair<int, int>>a_e[N], int n, int k, vector<int> euler, stack<int> S)
{
int i, j;
vector<bool> viz;
for (i = 0; i <= n + 5; i++)
viz.push_back(0);
S.push(k);
while (!S.empty())
{
int x = S.top();
if (a_e[x].size())
{
int e = a_e[x].back().first;
int muchie = a_e[x].back().second;
a_e[x].pop_back();
if (!viz[muchie])
{
viz[muchie] = 1;
S.push(e);
}
}
else
{
S.pop();
fout << x << " ";
}
}
}
void Eulerian()
{
int i, j, x, y;
stack<int> S;
vector<int> euler;
if (CheckEulerian(a_e, n))
{
Solve_Euler(a_e, n, 1, euler, S);
//fout << 1;
}
else fout << -1;
}
int main()
{
fin >> n >> m;
Citire_Eulerian();
Eulerian();
return 0;
}