#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std ;
vector<int> g[100010] ;
vector<bool> vis ;
void dfs(int idx)
{
vis[idx] = 1 ;
cout << idx << " " ;
sort(g[idx].begin() , g[idx].end()) ;
for(auto v: g[idx])
{
if(vis[v])
continue ;
dfs(v) ;
}
}
void bfs()
{
cout << '\n' ;
queue<int> q ;
q.push(1) ;
while(!q.empty())
{
int x = q.front() ;
sort(g[x].begin() , g[x].end()) ;
for(auto v: g[x])
{
if(vis[v])
continue ;
vis[v] = 1 ;
q.push(v) ;
}
cout << x << " " ;
q.pop() ;
}
}
int main()
{
int n , m ;
cin >> n >> m ;
for(int i = 0 ; i <= n + 1 ; i ++)
vis.push_back(0) ;
for(int i = 0 ; i < m ; i ++)
{
int x , y ;
cin >> x >> y ;
g[x].push_back(y) ;
}
dfs(1) ;
for(int i = 0 ; i <= n + 1 ; i ++)
vis[i] = 0 ;
bfs() ;
return 0 ;
}