아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

트리 뒤집기

면접 대비

시간 제한1초메모리 제한1024 MB

요약
주어진 순서 트리의 루트를 지정된 리프로 옮기되 각 노드에서 이웃의 반시계 방향 순서를 유지하고, 새 트리를 출력한다.
난이도

보통10점 중 6점

유형
트리, DFS, 구현, 재귀
정답자
아직 제출이 없습니다

문제

노드에 1…N1 \dots N 번호가 매겨진 트리가 주어진다. 노드 11 이 루트이며, 각 노드마다 자식 노드들의 목록이 왼쪽에서 오른쪽 순서로 주어진다.

이 트리의 잎 KK 를 들어 올려 새로운 루트로 만들되, 모든 간선은 그대로 두고 특히 각 노드 주위에서 간선들의 상대적인 회전 순서를 바꾸지 않는다. 이렇게 얻어지는 트리를 출력하여라.

예를 들어 아래 그림 왼쪽의 트리에서 잎 33 을 새 루트로 만들면 가운데 트리를 얻는다. 오른쪽 트리는 틀린 답이다. 노드 11 의 이웃을 반시계 방향으로 읽으면 원래 트리에서는 2,3,42, 3, 4 이지만 오른쪽 트리에서는 2,4,32, 4, 3 이기 때문이다.

    1      3       3
   /|\     |       |
  2 3 4    1       1
          / \     / \
         4   2   2   4

여기서 트리 란 연결된 비순환 그래프를 뜻하며 노드 11 이 그 루트이다. 트리 (자료 구조) 를 참고하여라.

입력

첫째 줄에 두 정수, 노드의 수 NN (1≤N≤10 0001 \le N \le 10\,000) 과 새 루트가 될 잎의 번호 KK (1≤K≤N1 \le K \le N) 가 주어진다.

이어지는 NN 개의 줄은 원래 트리의 각 노드를 설명한다. (i+1)(i+1) 번째 줄은 먼저 노드 ii 의 자식 수 mim_i 를, 이어서 그 mim_i 개의 자식 번호를 왼쪽에서 오른쪽 순서로 담는다.

출력

새 트리를 설명하는 정확히 NN 개의 줄을 입력과 같은 노드별 형식으로 출력한다. ii 번째 줄은 먼저 새 트리에서 노드 ii 의 자식 수를, 이어서 그 자식들을 왼쪽에서 오른쪽 순서로 담는다.

힌트

잎 33 (자식이 2,3,42, 3, 4 인 노드 11 로 이루어진 성형 트리의 잎) 을 새 루트로 만드는 첫 번째 예시를 살펴보자.

  1. 노드 11 은 이제 자식이 22 개이며, 순서대로 노드 44 와 22 이다.
  2. 노드 22 는 자식이 없다.
  3. 노드 33 은 자식이 11 개이며, 노드 11 이다.
  4. 노드 44 는 자식이 없다.

예제1

  1. 예제 1

    입력
    4 3
    3 2 3 4
    0
    0
    0
    
    예상 출력
    2 4 2
    0
    1 1
    0