예쁘게 출력한 이진 트리

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

문제

당신에게는 노드 개수가 $N$인 이진 트리가 있다. 당신은 이 이진 트리를 중위 순회하는 순서대로 노드들의 번호를 $1$부터 차례대로 매겼다. 그리고 부모가 위, 자식이 아래에 위치하게끔 왼쪽에서 오른쪽으로 번호 순서대로 늘어놓았다. 아래 그림은 그렇게 이진 트리를 늘어놓은 예시이다. 이때, $i$번 노드의 점수 $A_i$를 다음과 같이 정의한다:

  • 해당 노드의 위로 직선을 그었을 때, 해당 직선과 만나는 간선의 수 (단, 자기 자신과 부모를 잇는 간선이 존재하는 경우 그 간선도 반드시 개수에 포함한다)

노드의 개수 $N$과 노드들의 점수 $A_i$가 주어졌을 때, 이진 트리를 복원해 보자. 답이 최대 한 가지만 존재함을 증명할 수 있다.

입력

첫 번째 줄에 노드의 개수를 나타내는 정수 $N$이 주어진다. 두 번째 줄에 각 노드의 점수를 나타내는 $N$개의 정수 $A_1,A_2,\cdots ,A_N$이 공백으로 구분되어 주어진다.

출력

해당 점수를 갖는 이진 트리가 있는 경우는 첫 번째 줄에 $N$개의 정수 $B_1,B_2,\cdots ,B_N$을 공백으로 구분해 출력한다.

$B_i$는 $i$번 노드의 부모 노드의 번호이다. $i$번 노드의 부모 노드가 없는 경우 $B_i=0$이다.

해당 점수를 갖는 이진 트리가 없는 경우는 첫 번째 줄에 -1을 대신 출력한다.

제한

  • $1\le N\le 200\, 000$
  • $1\le i\le N$
  • $0\le A_i\le N-1$

힌트

루트가 $x$인 이진 트리를 중위 순회하는 순서대로 방문하는 함수 $f(x)$를 다음과 같이 정의할 수 있다.

  1. $x$의 왼쪽 자식 노드 $x_l$이 존재한다면 $f(x_l)$을 수행한다. 존재하지 않는다면 아무것도 하지 않는다.
  2. $x$를 방문한다.
  3. $x$의 오른쪽 자식 노드 $x_r$이 존재한다면 $f(x_r)$을 수행한다. 존재하지 않는다면 아무것도 하지 않는다.