import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BFS {
static boolean[] visited;
static int[] A;
static int N,M,V;
static ArrayList<Integer>[] graph;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
V = sc.nextInt();
graph = new ArrayList[N+1];
for (int i = 1; i <= N; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
int S = sc.nextInt();
int E = sc.nextInt();
graph[S].add(E);
graph[E].add(S);
}
for (int i = 1; i <= N; i++) {
Collections.sort(graph[i]);
}
visited = new boolean[N + 1];
DFS(V);
System.out.println();
visited = new boolean[N + 1];
BFS(V);
System.out.println();
}
static void DFS(int Node) {
System.out.print(Node + " ");
visited[Node] = true;
for (int i : graph[Node]) {
if (!visited[Node]) {
DFS(i);
}
}
}
static void BFS(int Node) {
Queue<Integer> queue = new LinkedList<>();
queue.add(Node);
visited[Node] = true;
while (!queue.isEmpty()) {
int now_Node = queue.poll();
System.out.print(now_Node + " ");
for (int i : graph[now_Node]) {
if (!visited[i]) {
visited[i] = true;
queue.add(i);
}
}
}
}
}