import java.io.*;
import java.util.*;
public class Main {
public static ArrayList<Integer> alist = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken());
int m = Integer.parseInt(stk.nextToken());
int vv = Integer.parseInt(stk.nextToken());
ArrayList<Integer>[] edge = new ArrayList[n + 1];
for (int i = 0; i < n + 1; i++) {
edge[i] = new ArrayList<>();
}
for (int i = 0; i < m; i++) {
stk = new StringTokenizer(br.readLine());
int u = Integer.parseInt(stk.nextToken());
int v = Integer.parseInt(stk.nextToken());
edge[u].add(v);
edge[v].add(u);
}
for (int i = 0; i < edge.length; i++) {
Collections.sort(edge[i]);
}
//DFS
dfs(vv, edge, new boolean[n+1]);
System.out.println();
//BFS
alist = new ArrayList<>();
boolean[] visited = new boolean[n + 1];
Queue<Integer> q = new LinkedList<>();
q.add(vv);
while (!q.isEmpty()) {
int tmp = q.poll();
if (!visited[tmp]) {
visited[tmp] = true;
System.out.print(tmp + " ");
for (int i = 0; i < edge[tmp].size(); i++) {
q.add(edge[tmp].get(i));
}
}
}
}
//DFS
public static void dfs(int v, ArrayList<Integer>[] edge, boolean[] visited) {
if (!visited[v]) {
alist.add(v);
visited[v] = true;
System.out.print(v + " ");
for (int i = 0; i < edge[v].size(); i++) {
dfs(edge[v].get(i), edge, visited);
}
}
}
}