eolymp
bolt
Try our new interface for solving problems
Məsələlər

Разложение перестановок

Разложение перестановок

В этой задаче перестановкой из \textbf{n} элементов будем называть последовательность целых чисел длины \textbf{n}, в которой каждое число от \textbf{0} до \textbf{n-1} встречается ровно один раз. Обозначим \textbf{i}-ый элемент перестановки \textbf{p} как \textbf{p_i}, где \textbf{i} - индекс от \textbf{0} до \textbf{n-1}. Определим произведение двух перестановок из \textbf{n} элементов \textbf{a} и \textbf{b} как перестановку \textbf{c} из \textbf{n} элементов, такую, что \textbf{c_i} = \textbf{a_bi}_\{ \}(оговоримся, что операция произведения перестановок лево-ассоциативная, то есть операции выполняются слева направо). Среди перестановок выделим класс "двойных" перестановок. Двойные перестановки - это перестановки, которые могут быть представлены в виде объединения двух непересекающихся возрастающих последовательностей. Например, перестановка (\textbf{1}, \textbf{3}, \textbf{4}, \textbf{0}, \textbf{5}, \textbf{2}) является двойной, так как ее можно разбить на две возрастающие последовательности (\textbf{1}, \textbf{3}, \textbf{4}, \textbf{5}) и (\textbf{0}, \textbf{2}), а перестановка (\textbf{5}, \textbf{1}, \textbf{3}, \textbf{4}, \textbf{0}, \textbf{2}) не является двойной. Необходимо написать программу, которая раскладывает данную перестановку в произведение двойных перестановок. При этом количество двойных перестановок в произведении должно быть достаточно малым. Ваша программа должна находить решение, состоящее не более, чем из \textbf{15} двойных перестановок. \InputFile В первой строке содержится число \textbf{n} (\textbf{2} ≤ \textbf{n} ≤ \textbf{20000}). Во второй строке записаны \textbf{n} чисел, представляющих собой исходную перестановку. \OutputFile Если решение при данных ограничениях найти невозможно, выведите единственное число \textbf{-1}. Если решение существует, в первую строку выведите число \textbf{k} - количество двойных перестановок в найденном решении, а в следующих \textbf{k} строках выведите сами двойные перестановки в порядке их следования в произведении.
Zaman məhdudiyyəti 1 saniyə
Yaddaşı istafadə məhdudiyyəti 64 MiB
Giriş verilənləri #1
26
11 20 5 14 21 9 4 12 3 22 15 13 25 16 10 18 6 8 23 17 2 0 24 7 19 1
Çıxış verilənləri #1
5
3 4 5 9 10 11 12 13 14 15 16 18 20 21 22 25 0 1 2 6 7 8 17 19 23 24
1 2 3 5 6 8 12 13 0 4 7 9 10 11 14 15 16 18 19 20 21 22 24 25 17 23
1 3 5 6 0 2 4 7 8 10 11 14 9 12 13 15 18 20 21 22 16 17 19 23 24 25
1 3 0 2 5 7 4 6 8 11 9 10 13 15 12 14 16 17 18 19 20 21 22 23 24 25
0 1 2 3 5 4 6 7 8 9 11 10 13 12 14 15 16 17 19 18 21 20 23 22 25 24
Müəllif Mike Mirzayanov, Igor Kulkin
Mənbə Saratov SU Contest, Thursday, Petrozavodsk Summer Session, August 24, 2006