트리 뽑아내기
시간 제한2초메모리 제한1024 MB
가중치가 서로 다른 루트 트리에서 자식 중 가중치가 가장 작은 쪽을 따라 리프까지 가는 경로의 가중치를 한 칸씩 밀고 리프를 제거합니다. 이 작업을 N번 반복하며 매번 직전 1번 정점의 가중치를 출력합니다.
문제
번 정점부터 번 정점까지 개의 정점으로 이루어진 루트 있는 트리가 있다. 루트는 번 정점이고, 번 정점의 부모는 번 정점이다(). 각 정점은 서로 다른 정수 가중치를 가지며, 번 정점의 가중치는 이다(). 자식이 없는 정점을 리프 정점이라고 한다.
루트인 번 정점에서 출발하여 자식 중 가중치가 가장 작은 정점으로 이동하는 과정을 리프 정점에 도달할 때까지 반복한다. 이렇게 번 정점에서 시작하여 리프 정점에서 끝나는 경로 를 특별한 경로라고 한다.
뽑아내기 연산은 다음과 같다.
- 번 정점과 번 정점의 가중치를 교환한다.
- 번 정점과 번 정점의 가중치를 교환한다.
- 번 정점과 번 정점의 가중치를 교환한다.
- 번 정점과 그 부모를 잇는 간선을 트리에서 제거한다.
즉, 특별한 경로 위의 각 정점은 경로에서 자신 다음에 오는 정점의 가중치를 받고, 경로 끝의 리프 정점은 트리에서 제거된다.

그림의 첫 번째 트리에서 특별한 경로는 이며, 뽑아내기를 적용하면 두 번째 트리가 된다. 다섯 번째 트리에서 특별한 경로는 이고, 뽑아내기를 적용하면 번 정점이 제거된다.
이와 같이 주어진 트리에 뽑아내기 연산을 번 수행한다. 각 뽑아내기 연산을 수행하기 전에 번 정점에 적혀 있던 가중치의 값을 구하는 프로그램을 작성하라.
입력
첫 번째 줄에 정수 이 주어진다.
두 번째 줄에 개의 정수 이 공백으로 구분되어 주어진다.
세 번째 줄에 개의 정수 이 공백으로 구분되어 주어진다.
출력
개의 줄에 걸쳐 답을 출력한다. 번째 줄에는 번째 뽑아내기 연산을 수행하기 전 번 정점에 적혀 있던 가중치를 출력한다.
제한
- 주어지는 모든 수는 정수이다.
- ()
- ()
- 은 서로 다르다.