#include <bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
const int M = 5e5 + 1;
vector<pair<int,int>> nei[M];
map<int,deque<int>> ind;
int deg[M], m;
bool vis[M];
vector<int> ans;
vector<int> f(int l,int r)
{
vector<int> v;
for (int i=l;i<r;)
{
if (ind[ans[i]].size()>1 && ind[ans[i]][1]<r)
{
int y=ind[ans[i]][1];
vector<int> v1=f(i,y);
for (int wh:v1)
cout<<wh<<' ';
cout<<endl;
i=y, ind[ans[i]].pop_front();
}
else
v.push_back(ans[i]), ind[ans[i++]].pop_front();
}
return v;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(NULL), cout.tie(NULL);
int n,m;
cin>>n>>m;
for (int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
nei[u].push_back({v,i});
nei[v].push_back({u,i});
deg[u]++, deg[v]++;
}
bool pos=1;
for (int i=1;i<=n;i++)
if (deg[i]%2) pos=0;
vector<pair<int,int>> v={{1,0}};
while (v.size())
{
pair<int,int> p=v.back();
int u=p.first;
vis[p.second]=1;
if (nei[u].empty())
v.pop_back(), ans.push_back(u);
else
{
if (!vis[nei[u].back().second]) v.push_back(nei[u].back());
nei[u].pop_back();
}
}
ans.pop_back();
for (int i=0;i<ans.size();i++)
ind[ans[i]].push_back(i);
vector<int> v1=f(0,m);
for (int i:v1)
cout<<i<<' ';
cout<<endl;
return 0;
}