import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Test {
static int n;
static int m;
static int[][] adjacent;
static boolean[] visited;
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
int startNum = Integer.parseInt(st.nextToken());
adjacent = new int[n+1][n+1];
visited = new boolean[n+1];
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int n1 = Integer.parseInt(st.nextToken());
int n2 = Integer.parseInt(st.nextToken());
adjacent[n1][n2] = 1;
adjacent[n2][n1] = 1;
}
dfs(startNum);
visited = new boolean[n+1];
System.out.println();
bfs(startNum);
}
static void dfs(int start) {
visited[start] = true;
System.out.print(start + " ");
for(int i = 1; i < (n+1); i++) {
if(adjacent[start][i] == 1 && !visited[i]) {
dfs(i);
}
}
}
static void bfs(int start) {
Queue<Integer> queue = new LinkedList<>();
visited[start] = true;
queue.add(start);
System.out.print(start + " ");
while (!queue.isEmpty()) {
int tmp = queue.poll();
for (int i = 0; i < (n+1); i++) {
if(adjacent[tmp][i] == 1 && !visited[i]) {
queue.add(i);
visited[i] = true;
System.out.print(i + " ");
}
}
}
}
}