#include <fstream>
#include <vector>
#include <stack>
#define int long long
using namespace std;
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
struct Edge {
int to;
int id;
};
int n,m;
vector<Edge> adj[100005];
int degree[100005];
bool used[500005];
signed main() {
cin>>n>>m;
for (int i=1; i<=m; ++i) {
int u, v;
cin>>u>>v;
adj[u].push_back({v, i});
adj[v].push_back({u, i});
degree[u]++;
degree[v]++;
}
for (int i=1; i<=n; ++i) {
if (degree[i]%2!=0) {
cout<<-1;
return 0;
}
}
vector<int> st;
vector<int> path;
st.push_back(1);
while (!st.empty()) {
int u=st.back();
while (!adj[u].empty() && used[adj[u].back().id]) {
adj[u].pop_back();
}
if (!adj[u].empty()) {
Edge e=adj[u].back();
adj[u].pop_back();
used[e.id]=true;
st.push_back(e.to);
} else {
path.push_back(u);
st.pop_back();
}
}
if ((int)path.size()-1<m) {
cout<<-1;
return 0;
}
for (int i=0; i<m; ++i) {
cout<<path[i]<<(i==m-1 ? "" : " ");
}
}