가계부 들여쓰기 복원

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

요약
각 항목의 금액이 바로 아래 자식들의 합과 같은 전위 순서 금액이 주어질 때, 각 줄의 0부터 시작하는 들여쓰기 깊이를 사전순으로 가장 작게 복원한다.
난이도

보통10점 중 7점

유형
동적 계획법, 그리디, 트리, 구현
정답자
아직 제출이 없습니다

문제

Juku는 자신의 지출을 아래와 같은 형식의 텍스트 파일에 정리한다. 계층이 항상 3단계로 되어 있는 것은 아니다.

3월 지출 - 1000
   식비 - 500
      치즈 스낵 - 250
      고기 - 250
   여가 - 400
      파티 - 200
      영화 - 200
   건강 - 100

그런데 파일을 다시 저장하는 과정에서 텍스트 편집기가 어떤 이유로 모든 들여쓰기를 잃어버렸고, 이제 파일은 다음과 같이 보인다.

3월 지출 - 1000
식비 - 500
치즈 스낵 - 250
고기 - 250
여가 - 400
파티 - 200
영화 - 200
건강 - 100

파일의 첫 번째 줄이 모든 지출의 합계라는 사실이 주어질 때, Juku가 원래의 계층 구조를 복원하도록 돕는 프로그램을 작성하라.

정확히 말하면, 각 줄의 금액은 그 줄 바로 아래 한 단계에 속한 항목(직속 자식)들의 금액 합과 같다. 금액들은 파일에 적힌 순서(계층의 전위 순회 순서)대로 주어지며, 각 줄의 들여쓰기 깊이를 복원해야 한다.

입력

첫 번째 줄에 줄의 개수 NN (1≤N≤201 \le N \le 20)이 주어진다. 이어지는 NN개의 줄에는 각 줄마다 하나의 금액 AiA_i (1≤Ai≤1091 \le A_i \le 10^9)가 파일 순서대로 주어진다.

출력

정확히 NN개의 줄을 출력한다. ii번째 줄에는 입력의 ii번째 금액이 갖는 들여쓰기 깊이를 출력한다(깊이는 0부터 센다). 첫 번째 줄의 깊이는 항상 00이고, N≥2N \ge 2이면 두 번째 줄의 깊이는 항상 11이다.

깊이 배열이 유효하다는 것은, 첫 번째 줄을 루트로 하는 하나의 계층 트리를 이루면서, 하위 항목으로 나뉘는 모든 줄에 대해 그 직속 자식들의 금액 합이 해당 줄의 금액과 정확히 같다는 뜻이다.

유효한 들여쓰기가 여러 개일 수 있으므로, 유효한 깊이 수열 d1,d2,…,dNd_1, d_2, \dots, d_N 중에서 사전순으로 가장 작은 것을 출력한다(두 수열을 앞에서부터 원소 단위로 비교하여, 처음으로 값이 다른 위치에서 더 작은 쪽을 택한다).

예제1

  1. 예제 1

    입력
    6
    1000
    500
    250
    250
    500
    500
    
    예상 출력
    0
    1
    2
    2
    1
    2