Олимпиадный тренинг

Задача . A. Хешируем деревья


Саша участвует в соревновании по программированию. В очередной задаче ей нужно уметь проверять корневые деревья на изоморфизм. Она никогда не сталкивалась с этой задачей раньше, но, будучи опытной участницей, быстро догадалась, что для этого стоит сопоставить каждому дереву некоторую последовательность и сравнивать уже эти последовательности, а не деревья. Саша хочет поставить в соответствие дереву такую последовательность a0, a1, ..., ah, где h — высота дерева, что ai равно числу вершин, находящихся на расстоянии i рёбер от корня.

К сожалению, в этот раз интуиция подвела Сашу, и оказалось, что такая последовательность может не однозначно задавать дерево. Чтобы это показать, вы должны написать программу, которая по заданной последовательности ai предоставит два неизоморфных корневых дерева, которым соответствует такая последовательность, или скажет, что такое дерево единственно.

Два корневых дерева считаются изоморфными, если можно так перенумеровать вершины одного из них, чтобы оно стало равно второму, при этом корень первого дерева должен получить номер корня второго дерева.

Высотой дерева будем называть наибольшее число рёбер в пути от корня до какой либо другой вершины.

Входные данные

Первая строка ввода содержит единственное целое число h (2 ≤ h ≤ 105) — высоту дерева.

Вторая строка содержит h + 1 целое число — последовательность a0, a1, ..., ah (1 ≤ ai ≤ 2·105). Сумма всех чисел ai не превосходит 2·105. Гарантируется, что последовательности соответствует хотя бы одно дерево.

Выходные данные

Если последовательность однозначно задаёт дерево, выведите «perfect».

Иначе в первую строку выведите «ambiguous». Во вторую и третью строчки выведите описания двух деревьев в следующем формате: в одну строку выведите чисел, k-е из них должно задавать предка вершины k или быть равным нулю, если k-я вершина является корнем дерева.

Эти два дерева должны быть неизоморфны и должны соответствовать заданной последовательности.

Примечание

Единственное дерево к первому примеру и два выведенных дерева ко второму:


Примеры
Входные данныеВыходные данные
1 2
1 1 1
perfect
2 2
1 2 2
ambiguous
0 1 1 3 3
0 1 1 3 2

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя