#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a); i <= (b); ++i)
#define FORR(i, a, b) for(int i = (a); i >= (b); --i)
#define vi vector<int>
#define vvi vector<vi>
#define pb push_back
using namespace std;
const int N = 5e5 + 9;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
#define cin fin
#define cout fout
int n, m;
bool viz[N];
int a[N], b[N];
vvi G(N);
vi ans;
void Dfs(int x) {
while (!G[x].empty()) {
auto id = G[x].back();
G[x].pop_back();
if (viz[id]) continue;
viz[id] = true;
Dfs(a[id] == x ? b[id] : a[id]);
}
ans.pb(x);
}
int main() {
int n, m;
cin >> n >> m;
int x, y;
FOR(i, 1, m) {
cin >> a[i] >> b[i];
G[a[i]].pb(i);
G[b[i]].pb(i);
}
FOR(i, 1, n) {
if (G[i].size() % 2 == 1) {
cout << "-1\n";
return 0;
}
}
Dfs(1);
ans.pop_back();
for(auto e : ans)cout << e << " "s;
cout << "\n"s;
return 0;
}