#include <algorithm>
#include <iostream>
#include <list>
#include <fstream>
#include <vector>
class Graph {
public:
Graph(int n) : edge(n) {}
void add_edge(int u, int v) {
edge[u].push_back(v);
edge[v].push_back(u);
}
std::vector<int> compute_euler() {
std::vector<int> euler;
for (std::list<int>& el : edge)
if (el.size() % 2 == 1)
return euler; // Euler circuit does not exist.
std::list<int> st;
st.push_back(0);
while (st.size() > 0) {
int v = st.back();
if (edge[v].size() > 0) {
int u = edge[v].front();
edge[v].pop_front();
edge[u].erase(std::find(edge[u].begin(), edge[u].end(), v));
st.push_back(u);
} else {
if (st.size() > 1) // Don't print last element again.
euler.push_back(v);
st.pop_back();
}
}
return euler;
}
private:
std::vector<std::list<int>> edge;
};
int main() {
std::ifstream in("ciclueuler.in");
std::ofstream out("ciclueuler.out");
int n, m;
in >> n >> m;
Graph g(n);
for (int i = 0; i < m; i++) {
int u, v;
in >> u >> v;
g.add_edge(u - 1, v - 1);
}
std::vector<int> euler = g.compute_euler();
if (euler.size() == 0) {
out << "-1\n";
} else {
for (int x : euler)
out << x + 1 << " ";
out << "\n";
}
return 0;
}