#include <bits/stdc++.h>
using namespace std;
vector<vector<int>>ans;
void cycs(int st, unordered_set<int>g[], int vis[], int iter){
vector<int>path;
while(1){
path.push_back(st);
vis[st]=iter;
if(g[st].size()){
int i = *g[st].begin();
if(vis[i]==iter){
///cycle found
vector<int>cur;
cur.push_back(i);
while(path.back()!=i){
cur.push_back(path.back());
vis[path.back()]=-1;
path.pop_back();
}
cur.push_back(i);
ans.push_back(cur);
g[st].erase(i);
g[i].erase(st);
st=i;
assert(st==path.back());
path.pop_back();
continue;
}
else{
g[i].erase(st);
g[st].erase(i);
st=i;
continue;
}
}
else{
break;
}
}
if(path.size()>1&&path.front()==path.back()){
ans.push_back(path);
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;
cin >> n >> m;
unordered_set<int>g[n];
for(int i = 0;i<m;i++){
int a,b;
cin >> a >> b;
a--;b--;
g[a].insert(b);
g[b].insert(a);
}
int vis[n];
fill(vis,vis+n,-1);
int iter=0;
for(int i = 0;i<n;i++){
while(g[i].size()){
cycs(i,g,vis,iter++);
}
}
for(vector<int>v:ans){
v.pop_back();
for(int i : v){
cout << i+1 << " ";
}
cout << "\n";
}
return 0;
}