import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static ArrayList<Integer>[] arr;
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int V = Integer.parseInt(st.nextToken());
arr = new ArrayList[N + 1];
for (int i = 1; i <= N; i++) {
arr[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
arr[start].add(end);
arr[end].add(start);
}
for (int i = 1; i <= N; i++) {
Collections.sort(arr[i]);
}
visited = new boolean[N + 1];
dfs(V);
System.out.println();
visited = new boolean[N + 1];
bfs(V);
}
private static void dfs(int node) {
System.out.print(node + " ");
visited[node] = true;
for (int i : arr[node]) {
if (!visited[i])
dfs(i);
}
}
private static void bfs(int node) {
Queue<Integer> queue = new LinkedList<>();
queue.add(node);
visited[node] = true;
while (!queue.isEmpty()) {
int now = queue.poll();
System.out.print(now + " ");
for (int i : arr[now]) {
if (!visited[i]) {
visited[i] = true;
queue.add(i);
}
}
}
}
}