예쁘게 출력한 이진 트리
시간 제한1초메모리 제한1024 MB
중위 순회 순서로 번호를 매긴 이진 트리를 평면에 그렸을 때 각 노드의 점수 A_i가 주어지면, 부모 배열 B_i를 복원하거나 불가능하면 -1을 출력한다.
문제
당신에게는 노드 개수가 인 이진 트리가 있다. 당신은 이 이진 트리를 중위 순회하는 순서대로 노드들의 번호를 부터 차례대로 매겼다. 그리고 부모가 위, 자식이 아래에 위치하게끔 왼쪽에서 오른쪽으로 번호 순서대로 늘어놓았다. 아래 그림은 그렇게 이진 트리를 늘어놓은 예시이다. 이때, 번 노드의 점수 를 다음과 같이 정의한다:
- 해당 노드의 위로 직선을 그었을 때, 해당 직선과 만나는 간선의 수 (단, 자기 자신과 부모를 잇는 간선이 존재하는 경우 그 간선도 반드시 개수에 포함한다)
노드의 개수 과 노드들의 점수 가 주어졌을 때, 이진 트리를 복원해 보자. 답이 최대 한 가지만 존재함을 증명할 수 있다.

입력
첫 번째 줄에 노드의 개수를 나타내는 정수 이 주어진다. 두 번째 줄에 각 노드의 점수를 나타내는 개의 정수 이 공백으로 구분되어 주어진다.
출력
해당 점수를 갖는 이진 트리가 있는 경우는 첫 번째 줄에 개의 정수 을 공백으로 구분해 출력한다.
는 번 노드의 부모 노드의 번호이다. 번 노드의 부모 노드가 없는 경우 이다.
해당 점수를 갖는 이진 트리가 없는 경우는 첫 번째 줄에 -1을 대신 출력한다.
제한
힌트
루트가 인 이진 트리를 중위 순회하는 순서대로 방문하는 함수 를 다음과 같이 정의할 수 있다.
- 의 왼쪽 자식 노드 이 존재한다면 을 수행한다. 존재하지 않는다면 아무것도 하지 않는다.
- 를 방문한다.
- 의 오른쪽 자식 노드 이 존재한다면 을 수행한다. 존재하지 않는다면 아무것도 하지 않는다.