Техническое обслуживание лазерной турели
Как главный офицер по вооружению на Имперском Звездном Разрушителе, вы отвечаете за регулярное техническое обслуживание панелей лазерных турелей. Каждая панель представляет собой квадрат размером n×n с n гнездами, в которых установлены турели. Чтобы избежать неравномерного износа цепей панели, турели необходимо периодически перемещать между гнездами. Турели могут вращаться на месте с шагом в 45^o, но не могут стрелять между такими поворотами. Все турели выровнены по сетке панели при установке.
Главное условие размещения турелей — отсутствие "конфликтов", то есть турели не должны иметь возможности стрелять друг в друга. Они должны быть расположены так, чтобы ни две турели на одной панели не находились на одной горизонтальной, вертикальной или диагональной линии сетки. Чтобы упростить обслуживание турелей и снизить количество ошибок при их размещении, Империя предписала, чтобы все перемещения турелей выполнялись в виде вращений или отражений существующих конфигураций, так как предотвращение конфликтов сохраняется при таких преобразованиях.
Дана допустимая (без конфликтов) конфигурация панели размером n×n. Существует три поворота по часовой стрелке: 90^o, 180^o и 270^o. Также есть четыре плоскости зеркала: вертикальная, горизонтальная, диагональная (по ячейкам, где строка = столбец) и антидиагональная (по ячейкам, где строка + столбец = n - 1). Таким образом, существует восемь конфигураций, одобренных Империей (некоторые из которых могут быть идентичны для конфигураций, симметричных при повороте на 90^o и/или 180^o). Рисунок 1 показывает восемь одобренных конфигураций для n = 5, а Рисунок 2 демонстрирует пример из n = 6 конфигурации с симметрией 180^o и пример из n = 4 конфигурации с симметрией 90^o.
Рисунок 1: Набор конфигураций для n = 5, получаемых с помощью операций симметрии
Рисунок 2: Примеры вращательной симметрии в конфигурациях
Хотя панель представляет собой двумерную матрицу, природа допустимой конфигурации (в каждом ряду только одна турель) позволяет представить её в виде одномерного вектора, указывающего позиции столбцов для турели в каждом ряду. Верхний ряд панели имеет индекс ноль, аналогично нумерации экранных координат.
Напишите метод, который получает одну допустимую конфигурацию панели и вычисляет, в той же одномерной форме, остальные семь конфигураций, одобренных Империей под указанными выше вращениями и отражениями. В частности, ваша программа должна записать обратно полученную конфигурацию, за которой следуют конфигурации, полученные при поворотах на 90^o, 180^o и 270^o в этом порядке, за которыми следуют отражения в порядке вертикального зеркала, антидиагонального зеркала, горизонтального зеркала и диагонального зеркала.
Входные данные
Входные данные состоят из неопределенного количества строк, содержащих целые числа, разделенные пробелами. Первое целое число в строке указывает размер задачи (n); ноль указывает на конец обработки, в противном случае 4 ≤ n ≤ 20. После этого n будет n целых чисел, дающих позиции столбцов.
Выходные данные
Для каждой задачи напечатайте восемь строк, дающих одобренные конфигурации в указанном выше порядке, в которых на каждой строке числа выровнены по правому краю в полях из трех символов. Эти восемь строк следуют за пустой строкой, которая показана в Примере вывода как "(пустая строка)".