Вам задано корневое дерево из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\). Корнем может быть любая из вершин.
Дерево — это связный неориентированный граф без циклов. Корневое дерево — дерево с выделенной вершиной, которую называют корнем.
Дерево задано массивом предков \(b\), содержащим \(n\) чисeл: \(b_i\) — предок вершины с номером \(i\). Предком вершины \(u\) называется такая вершина, которая является следующей вершиной на простом пути от \(u\) к корню. Например, на простом пути из \(5\) в \(3\) (корень), следующая вершина будет \(1\), таким образом, предком вершины \(5\) является вершина \(1\).
У корня предка нет, для него в качестве \(b_i\) используется значение \(i\) (таким образом, корень — единственная вершина, для которой \(b_i=i\)).
Например, если \(n=5\) и \(b=[3, 1, 3, 3, 1]\), то дерево выглядит следующим образом.
Пример корневого дерева для \(n=5\), корень дерева — вершина \(3\). Задан массив \(p\) — перестановка вершин дерева. Если это возможно, расставьте целочисленные положительные веса на всех ребрах данного дерева так, чтобы вершины, отсортированные по увеличению расстояния от корня, образовывали заданную перестановку \(p\).
Иными словами, по заданной перестановке вершин \(p\) необходимо подобрать такие положительные веса рёбер, чтобы выполнялось неравенство \(dist[p_i]<dist[p_{i+1}]\) для всех \(i\) от \(1\) до \(n-1\), где \(dist[u]\) — сумма весов рёбер на пути от корня до \(u\). В частности, \(dist[u]=0\), если вершина \(u\) является корнем дерева.
Например, пусть \(p=[3, 1, 2, 5, 4]\). В этом случае следующие веса ребер удовлетворяют этой перестановке:
- ребро (\(3, 4\)) имеет вес \(102\);
- ребро (\(3, 1\)) имеет вес \(1\);
- ребро (\(1, 2\)) имеет вес \(10\);
- ребро (\(1, 5\)) имеет вес \(100\).
В этом случае массив расстояний от корня имеет вид: \(dist=[1,11,0,102,101]\). Если вершины отсортировать по возрастанию расстояний, то получится заданная перестановка \(p\).
Выведите искомые веса рёбер или определите, что подходящего способа назначить веса не существует. Если решений несколько, то выведите любое из них.
Выходные данные
Для каждого набора входных данных выведите ответ на отдельной строке.
Если решение существует, то выведите массив из \(n\) целых чисел \(w_1, w_2, \dots, w_n\), где \(w_i\) — вес ребра, которое ведёт из \(b_i\) в \(i\). Для корня такого ребра не существует, поэтому используйте значение \(w_i=0\). Для всех остальных вершин значения \(w_i\) должны удовлетворять неравенству \(1 \le w_i \le 10^9\). Среди значений \(w_i\) могут быть равные числа, но все суммы весов ребер от корня до вершин должны быть различны и удовлетворять заданной перестановке.
Если решений несколько, выведите любое из них.
Если решения не существует, то выведите -1.