만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 암호 복원

면접 대비

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

요약
트리와 일부가 지워진 잎 제거 부호가 주어지면 부호화 과정을 재현해 지워진 숫자를 복원합니다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 트리, 힙
정답자
아직 제출이 없습니다

문제

V={1,2,…,n}V = \{1, 2, \dots, n\}이고 E⊂{{u,v}∣1≤u,v≤n}E \subset \{\{u, v\} \mid 1 \le u, v \le n\}이라고 하자. 트리 T=(V,E)T = (V, E)는 연결되어 있으면서 간선이 정확히 n−1n - 1개인 그래프다. 아래 그림은 트리 T1T_1이다.

T1T_1에서 V={1,2,3,4,5,6,7}V = \{1, 2, 3, 4, 5, 6, 7\}이고 E={{4,6},{2,6},{6,5},{3,5},{5,1},{1,7}}E = \{\{4, 6\}, \{2, 6\}, \{6, 5\}, \{3, 5\}, \{5, 1\}, \{1, 7\}\}이다.

민턴 교수는 트리를 암호로 바꾸는 방법을 찾아냈다. 트리의 암호는 VV의 원소 n−2n - 2개를 나열한 수열이고, 다음 세 단계를 n−2n - 2번 반복해서 만든다.

  1. 남아 있는 트리에서 번호가 가장 작은 잎(차수가 11인 정점)을 고른다.
  2. 그 잎에 붙어 있는 유일한 정점의 번호를 수열 뒤에 이어 붙인다.
  3. 고른 잎을 트리에서 지운다.

n−2n - 2번을 반복하면 정점이 두 개 남는다. T1T_1의 암호는 ⟨6,5,6,5,1⟩\langle 6, 5, 6, 5, 1 \rangle이다.

암호는 숫자 몇 개가 지워진 채로 전해지기도 한다. 지워진 자리는 문자 x로 표시한다. 트리와 숫자가 지워진 암호가 주어지면, 지워진 숫자를 알아내는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 tt가 주어진다. (1≤t≤101 \le t \le 10)

각 테스트 케이스는 세 줄이다. 첫째 줄에 정점의 개수 nn이 주어진다. (2≤n≤100002 \le n \le 10000) 둘째 줄에 트리를 나타내는 2n−22n - 2개의 수가 공백으로 구분되어 주어진다. 앞에서부터 두 개씩 짝을 지어 첫 번째 짝이 첫 번째 간선, 두 번째 짝이 두 번째 간선을 뜻하고, 나머지도 같은 방식이다. 셋째 줄에 숫자가 지워진 암호가 토큰 n−2n - 2개로 주어진다. 각 토큰은 정점 번호이거나, 지워진 자리를 뜻하는 x다. n=2n = 2이면 셋째 줄은 비어 있다.

지워지지 않은 숫자는 주어진 트리의 암호와 일치한다. 모든 테스트 케이스의 nn을 더한 값은 3000030000을 넘지 않는다.

출력

테스트 케이스마다 한 줄에, 지워진 숫자를 입력에 나온 순서대로 공백 하나로 구분해 출력한다. 지워진 숫자가 하나도 없으면 빈 줄을 출력한다.

예제2

  1. 예제 1

    입력
    1
    7
    4 6 2 6 6 5 3 5 5 1 1 7
    6 x x 5 1
    
    예상 출력
    5 6
    
  2. 예제 2

    입력
    1
    5
    3 1 3 2 3 4 3 5
    x x x
    
    예상 출력
    3 3 3