#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<set<int>> adj;
map<pair<int, int>, int> edgeIdx;
void cycle(int u, vector<bool>& vis, set<pair<int, int>> used, stack<int>& st, vector<int>& out) {
if (vis[u]) {
int v = st.top();
out.push_back(u);
while (v != u) {
adj[out.back()].erase(v);
adj[v].erase(out.back());
out.push_back(v);
st.pop();
v = st.top();
}
adj[out.back()].erase(u);
adj[u].erase(out.back());
return;
}
vis[u] = true;
st.push(u);
for (int v : adj[u]) {
if (used.count({u, v}) || used.count({v, u})) continue;
used.emplace(u, v);
used.emplace(v, u);
cycle(v, vis, used, st, out);
if (!out.empty()) return;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
adj.resize(n);
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
u--, v--;
adj[u].insert(v);
adj[v].insert(u);
edgeIdx[{u, v}] = i;
edgeIdx[{v, u}] = i;
}
for (int u = 0; u < n; u++) {
while (!adj[u].empty()) {
vector<int> c;
set<pair<int, int>> used;
vector<bool> vis(n);
stack<int> st;
cycle(u, vis, used, st, c);
if (c.empty()) continue;
for (int v : c) cout << v + 1 << ' ';
cout << '\n';
}
}
}