В Екатеринбурге строится сразу несколько небоскрёбов. Для их возведения
требуется много стройматериалов высокого качества, большинство из которых
доставляется в город по железной дороге. И эта доставка не всегда
происходит так быстро, как этого хотели бы подрядчики. Все дело в том,
что составы слишком долго простаивают на узловых станциях, пока их
сортируют для отправки в разные концы страны.
Как известно, товарные вагоны сортируются следующим образом:
состав подгоняется к развилке, где каждый вагон может проследовать
по левому или правому пути. После этого состав «склеивается».
Например, если вагоны были в порядке «1 2 3 4 5 6 7», то можно
разделить их на две части «1 3 5» (влево) и «2 4 6 7» (вправо), и
затем склеить, получив «1 3 5 2 4 6 7».
Помогите железнодорожникам и строителям ускорить работу. Напишите программу,
которая отсортирует вагоны в нужном порядке, склеивая их минимальное
количество раз.
Исходные данные
В первой строке записано целое число N — количество вагонов в составе
(1 ≤ N ≤ 10000).
Во второй строке записано N чисел — начальный порядок вагонов. Все
вагоны имеют различные номера от 1 до N. В результате сортировки вагоны
должны быть выстроены по порядку, начиная с первого.
Результат
В первой строке выведите число K — минимальное количество
склеиваний, которое необходимо, чтобы отсортировать вагоны.
Далее выведите K + 1 строку, в каждой по N чисел через пробел.
В первой строке выведите начальный порядок вагонов, в каждой следующей —
порядок после очередного склеивания.
Примеры
исходные данные | результат |
---|
5
5 1 3 2 4
| 2
5 1 3 2 4
1 2 5 3 4
1 2 3 4 5
|
6
6 5 2 4 1 3
| 3
6 5 2 4 1 3
6 4 1 5 2 3
6 1 2 3 4 5
1 2 3 4 5 6
|
Автор задачи: Сергей Пупырев
Источник задачи: XII Чемпионат УрГУ по программированию, 6 октября, 2007