관료주의

루트에서 가장 번호가 작은 자식으로 내려가는 경로를 따라 업무를 반복 처리하면서 경로상의 직원에게 1, 2, 3... 코인을 지급하고 끝 직원을 삭제했을 때, 직원마다 받은 코인의 총합을 구한다.

어려움8트리DFS시뮬레이션완전 탐색아직 제출이 없습니다시간 제한1초메모리 제한64 MB

문제

미르코가 거대 기업의 대표가 되었다. 이 기업에는 11번부터 NN번까지 번호가 붙은 NN명이 일하고, 미르코의 번호는 11이다. 미르코를 뺀 모든 직원에게는 상사가 정확히 한 명 있고, 그 직원을 상사의 부하라고 부른다. 한 상사가 부하를 여러 명 둘 수 있지만, 그 상사도 자기 상사에게 보고한다. 미르코만 예외다. 피라미드의 꼭대기에 있어서 상사가 없고 부하만 있다.

투자자에게서 일감이 들어오면 미르코는 그 일을 자기 부하 가운데 번호가 가장 작은 사람에게 넘긴다. 일을 받은 사람도 자기 부하 가운데 번호가 가장 작은 사람에게 넘기고, 이 과정은 부하가 없는 사람에게 일이 닿을 때까지 이어진다. 그 사람이 일을 직접 한다.

진짜 문제는 여기서 시작된다. 일을 한 사람은 11코인을 받고, 그 사람의 상사는 22코인, 그 상사의 상사는 33코인을 받는 식으로 올라가며, 미르코는 이 사슬에 놓인 사람 수만큼 코인을 받는다. 급여를 나눈 뒤 실제로 일한 직원은 이 구조가 불공평하다고 느껴 회사를 그만둔다.

다음 일감을 처리할 때는 사람이 한 명 줄어 있어 급여 총액이 작아지기도 하지만, 일은 계속되어야 한다. 일감은 계속 쌓이므로 일을 맡기고, 처리하고, 코인을 나누고, 일한 사람이 떠나는 절차는 미르코 혼자 남아 자신의 처음이자 마지막 일을 할 때까지 반복된다.

미르코는 그때까지 큰돈을 모으겠지만, 직원 각자가 얼마를 벌었는지도 알고 싶어 한다.

입력

첫째 줄에 미르코를 포함한 직원 수 NN이 주어진다 (2N2000002 \le N \le 200000).

둘째 줄에 N1N - 1개의 정수 a2,a3,,aNa_2, a_3, \dots, a_N이 주어진다 (1ai<i1 \le a_i < i). aia_iii번 직원의 상사 번호이다.

출력

한 줄에 NN개의 수를 공백 하나로 구분해 출력한다. ii번째 수는 ii번 직원이 받은 코인의 총합이다.

힌트

N=5N = 5인 예제를 따라가 보자. 미르코는 첫 일감을 22번에게 맡기고, 22번은 33번에게 넘기며, 33번이 그 일을 한다. 그래서 33번은 11코인, 22번은 22코인, 11번(미르코)은 33코인을 받는다. 그 뒤 33번이 회사를 떠난다.

미르코는 두 번째 일감도 22번에게 맡긴다. 33번이 이미 떠났으므로 22번은 44번에게 넘기고, 44번은 55번에게 넘겨 55번이 일을 한다. 이때 55번은 11코인, 44번은 22코인, 22번은 33코인, 11번은 44코인을 받는다. 그리고 55번이 떠난다.

같은 절차가 일감 55개에 대해 반복된다. 최종적으로 미르코는 1313코인, 22번은 88코인, 44번은 33코인을 받고, 33번과 55번은 각각 11코인을 받는다.