Профессор Иванов рассказал профессору Петрову, что придумал новый способ
сортировки. В его основе лежит следующая функция change.
change(a: integer)
begin
for j := 0 to n - 1 do
begin
if p[j] = a then
k := j
end
swap(k, (k + p[k]) mod n)
end
Функция swap(i, j) меняет местами элементы массива pi и pj.
Профессор Иванов утверждает, что любой массив p0, …,
pn − 1, являющийся перестановкой целых чисел 1, ..., n,
можно упорядочить по возрастанию, несколько раз вызвав функцию change.
Нужно только правильно подобрать для каждого вызова функции в качестве её
аргумента a целое число в пределах от 1 до n.
Профессор Петров верит коллеге, но он не очень хорошо понял, как работает алгоритм.
Поэтому он предложил перестановку p0, …, pn − 1 и попросил
профессора Иванова отсортировать её по возрастанию с помощью функции
change.
Исходные данные
В первой строке записано целое число n (1 ≤ n ≤ 500).
Во второй строке записаны целые числа p0, …, pn − 1 в пределах от 1 до n —
перестановка, предложенная профессором Петровым.
Результат
Если профессор Иванов не сможет с помощью функции change отсортировать
массив p0, …, pn − 1 по возрастанию, выведите «Impossible». В
противном случае выведите в первой строке число m — количество вызовов
функции (0 ≤ m ≤ 106). В следующих m строках выведите
аргументы, которые нужно подавать на вход функции change.
Гарантируется, что если массив можно отсортировать по возрастанию, то это можно
сделать не более чем за 106 вызовов функции.
Пример
исходные данные | результат |
---|
5
1 3 5 2 4
| 3
4
3
3
|
Автор задачи: Ольга Соболева (подготовка — Денис Дублённых)
Источник задачи: Ural FU contest. Kontur Cup. Petrozavodsk training camp. Winter 2013