import java.io.BufferedInputStream;
import java.util.*;
public class Main {
static int N = 100010;
static int[] h = new int[N];
static int[] ne = new int[N];
static int[] e = new int[N];
static boolean[] st = new boolean[N];
static int idx = 0;
static int n,m;
static void add(int a,int b){
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++;
}
static void dfs(int u){
System.out.print(u + " ");
st[u] = true;
for(int i = h[u];i != -1;i = ne[i]){
int j = e[i];
// 直接对j来进行下一步的搜索
if(!st[j])
dfs(j);
}
}
static void bfs(int u){
Queue<Integer> queue = new LinkedList<>();
queue.add(u);
st[u] = true;
while(!queue.isEmpty()){
int a = queue.poll();
System.out.print(a + " ");
for(int i = h[a];i != -1;i = ne[i]){
int j = e[i];
if(!st[j]){
// 加入队列
queue.add(j);
st[j] = true;
}
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(new BufferedInputStream(System.in));
n = sc.nextInt();
m = sc.nextInt();
// 初始化所有的顶点
Arrays.fill(h,-1);
// 先来进行排序将大的数放前面将小的数放后面
List<int[]> list = new ArrayList<>();
while(m -- > 0){
int a = sc.nextInt();
int b = sc.nextInt();
list.add(new int[]{a,b});
}
//直接开始dfs
Collections.sort(list, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])
return o2[1] - o1[1];
return o1[0] - o2[0];
}
});
// 再来添加边
for(int i = 0;i < list.size();i ++){
int[] tmp = list.get(i);
int a = tmp[0];
int b = tmp[1];
add(a,b);
}
dfs(1);
Arrays.fill(st,false);
System.out.println();
bfs(1);
}
}