Codeforces Round 410 (Div. 2) |
---|
Закончено |
Майк открыл новый способ кодирования перестановок. Если у него есть перестановка P = [p1, p2, ..., pn], он закодирует ее следующим образом:
Пусть A = [a1, a2, ..., an] — последовательность длины n, которая будет представлять код перестановки. Для каждого i от 1 до n последовательно он будет выбирать наименьшее непомеченное j (1 ≤ j ≤ n) такое, что pi < pj и присвоит в ai число j (другими словами выполнит ai = j) и пометит j. Если такого j не существует, то он присвоит в ai число - 1 (он выполнит ai = - 1).
Майк забыл свою изначальную перестановку, но он помнит ее код. Ваша задача проста: найдите любую перестановку такую, что ее код такой же, как и код изначальной перестановки Майка.
Вы можете предположить, что всегда существует хотя бы одна перестановка.
Первая строка содержит единственное целое число n (1 ≤ n ≤ 500 000) — длина перестановки.
Вторая строка содержит n целых чисел, разделенных пробелами, a1, a2, ..., an (1 ≤ ai ≤ n или ai = - 1) — код перестановки Майка.
Вы можете предположить, что все положительные числа из A различны.
В первой и единственной строке выведите n чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка P, которая имеет такой же код, что и данный. Заметьте, что числа в перестановке различны.
6
2 -1 1 5 -1 4
2 6 1 4 5 3
8
2 -1 4 -1 6 -1 8 -1
1 8 2 7 3 6 4 5
Для перестановки из первого примера:
i = 1, наименьшее j равно 2, потому что p2 = 6 > p1 = 2.
i = 2, нет такого j, потому что p2 = 6 наибольший элемент в перестановке.
i = 3, наименьшее j равно 1 потому что p1 = 2 > p3 = 1.
i = 4, наименьшее j равно 5 (2 уже помечено), потому что p5 = 5 > p4 = 4.
i = 5, нет такого j, потому что 2 уже помечено.
i = 6, наименьшее j равно 4, потому что p4 = 4 > p6 = 3.
Название |
---|