import sys
input = sys.stdin.readline
sys.setrecursionlimit(1000000)
def DFS(r):
visited[r] = True
global cnt
path[r] = cnt
cnt += 1
for i in graph[r]:
if not visited[i]:
DFS(i)
if __name__ == '__main__':
n, m, r = map(int,input().split())
graph =[[] for _ in range(n+1)]
visited = [False] * (n+1)
cnt = 1
path = [0] * (n+1)
for _ in range(m):
u,v = map(int,input().split())
graph[u].append(v)
graph[v].append(u)
for i in range(1, n+1):
graph[i].sort(reverse=True)
DFS(r)
for i in range(1, n+1):
print(path[i])
내림차순으로 방문한다는 조건이 있기 때문에 그래프를 입력 받은 뒤 노드마다 들어 있는 인접 노드를 내림차순(큰 수에서 작은수로)으로 정렬해준다.
결과를 출력한 리스트 path를 0으로 초기화해주고 방문 순서에 글로벌 변수 cnt를 사용해 순서를 중첩시켜 준다(DFS 내에 cnt를 사용할 경우 중첩 X 매번 DFS() 될때마다 1로 초기화 됨)