#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
struct Edge{
int u,v;
};
vector<int>e[1000010];
vector<Edge>edges;
bool st[1000010];
bool cmp(Edge a,Edge b){
if(a.v == b.v){
return a.u < b.u;
}else return a.v < b.v;
}
void dfs(int u){
cout << u << " ";
st[u] = true;
for(int i = 0;i < e[u].size();i++){
int j = edges[e[u][i]].v;
if(!st[j]){
dfs(j);
}
}
}
void bfs(){
queue<int>q;
q.push(1);
cout << 1 << " ";
st[1] = true;
while(q.size()){
int t = q.front();
q.pop();
for(int i = 0;i < e[t].size();i++){
int j = edges[e[t][i]].v;
if(!st[j]){
st[j] = true;
cout << j << " ";
q.push(j);
}
}
}
}
int main(){
int n,m;
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for(int i = 0;i < m;i++) {
int a,b;
cin >> a >> b;
edges.push_back((Edge){a,b});
}
sort(edges.begin(),edges.end(),cmp);
for(int i = 0;i < m;i++){
e[edges[i].u].push_back(i);
}
dfs(1);
puts("");
memset(st,0,sizeof st);
bfs();
return 0;
}