Пригощання корів#8667

Пригощання корів

1 секунда
128 мегабайтів
Дуже легка

Корови відзначили ще один успішний місяць рекордного виробництва молока, і кожна з них заслужила особливе частування. Вони вишикувалися у прямокутнику розміром на , очікуючи на винагороду.

Кожна корова має унікальний показник продуктивності F_{rc} (1 \le F_{rc} \le 1000000), що відображає її загальний внесок у виробництво молока. Фермер Джон вирішив, що справедливо буде роздавати частування, починаючи з найпродуктивніших корів. Він планує пройти по прямокутнику рядок за рядком, зліва направо, роздаючи частування в такому порядку.

Фермер Джон попросив корів реорганізуватися так, щоб найпродуктивніші корови отримали частування першими. Корови можуть обмінюватися місцями лише цілими рядками або стовпцями. Джон попросив їх зробити все можливе, щоб найкраща корова опинилася у верхньому лівому куті (рядок , стовпець ), наступна краща — у рядку , стовпець (якщо можливо), і так далі. Хоча корови не можуть повністю відсортувати себе, вони можуть дотримуватися такої стратегії:

prb8669.gif

Знайти наступну корову з найвищим рейтингом. Обмінювати рядки та стовпці (не переміщуючи корів з вищим рейтингом) так, щоб перемістити її в найкраще доступне місце (наприклад, рядок , стовпець , якщо воно доступне, або рядок , стовпець , якщо в першому рядку немає вільних місць).

Наприклад, розглянемо множину з на корів:

prb8667_1.gif

Корова з рейтингом має найвищий рейтинг, тому її потрібно розмістити в лівому верхньому куті. Для цього обміняємо місцями рядки і , а потім стовпці і (або навпаки — результат буде той самий):

prb8667_2.gif

Корова з рейтингом повинна бути винагороджена наступною після корови з найвищим рейтингом. Вона зараз у клітинці (, ) — в останній клітинці, яка буде винагороджена. На цьому етапі вже занадто пізно перемістити її на перший рядок або навіть у перший стовпець. Її потрібно перемістити в (, ), обмінявши стовпці і , а потім рядки і :

prb8667_3.gif

Корова з рейтингом отримує винагороду відразу після корови з . Корова вже винагороджена. Корова з отримує винагороду відразу після корови з . Корова з отримує винагороду відразу після корови з . Корова з вже винагороджена. Корову з найкраще перемістити в рядок , стовпець , але рядки і заморожені, як і всі стовпці. Таким чином, корови , і не рухаються, і друга діаграма вище — "найкраще, що можуть зробити корови".

Реалізуйте цей алгоритм для інших прямокутних масивів корів.

Вхідні дані

Перший рядок містить два цілих числа і (1 \le w \le 25, 1 \le h \le 25). Кожен з наступних рядків містить цілих чисел F_{ic} (1 \le c \le w).

Вихідні дані

Виведіть рядків. Кожен рядок містить цілих чисел, що задають ряд корів в остаточному їх розташуванні.

Приклади

Приклад 1

Loading
Loading