#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(a) a.begin(),a.end()
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef unsigned long long ull;
typedef vector<int> vi;
const int mxn = 5e5+1;
vector<pii> g[mxn];
bool vis[mxn];
int cnt[mxn];
vector<int> path;
void dfs(int u){
while(!g[u].empty()){
auto [v,i] = g[u].back();
g[u].pop_back();
if(vis[i]) continue;
vis[i] = true;
dfs(v);
}
path.pb(u);
cnt[u]++;
if(cnt[u]==2){
cout << u << ' '; path.pop_back();
while(path.back() != u){
cout << path.back() << ' ';
cnt[path.back()]--;
path.pop_back();
}
cout << '\n';
cnt[u]--;
}
}
void solve(){
int n,m; cin >> n >> m;
for(int i = 1; i <= m; i++){
int u,v; cin >> u >> v;
g[u].pb({v,i}); g[v].pb({u,i});
}
dfs(1);
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int t = 1;
// cin >> t;
while(t--){solve();}
}