Профессор Иванов рассказал профессору Петрову, что придумал новый способ
сортировки. В его основе лежит следующая функция 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