Lego Land
Рисунок 1: VR вид на центр міста з Lego
Як інженеру Lego в міському середовищі, важливо мати кожну можливу технологічну перевагу над конкурентами. Ви нещодавно помітили, наскільки популярна технологія віртуальної реальності серед людських інженерів, і хочете мати щось подібне, щоб зацікавити венчурних капіталістів. На щастя, створити VR вид на центр міста з Lego досить просто. По-перше, вам потрібно лише показати будівлі, і ви вже знаєте висоти та розташування всіх будівель, які хочете побудувати. По-друге, Lego VR здатний представляти вид кубічної секції міста. Це робиться шляхом проектування куба на одну з площин, що містить одну з граней куба. Інженери Lego можуть переглядати вид, обертаючи кубічну секцію міста на 90 градусів за раз навколо будь-якої з осей X, Y або Z, що проходять через його центр.
Вам потрібно написати програму Lego VR, яка прийматиме на вхід N×N матричний вид на центр міста та серію команд обертання і створюватиме результатуючий N×N матричний вид на той самий центр міста з нової перспективи. Вхідна матриця N×N представляє вид зверху на N×N×N куб центру міста з Lego (з однією гранню куба на рівні землі).
Кожне число у вхідній матриці вказує на висоту будівлі у відповідному місці. Наприклад, 0 вказує, що будівля відсутня, тоді як 3 вказує на будівлю висотою 3 поверхи (Lego). Зверніть увагу, що в початковому виді зверху немає прихованого відкритого простору. Іншими словами, будівлі є суцільними. Також зауважте, що у виді представлені лише будівлі, а не земля. Будь-яка область виду, що не містить блоку будівлі, матиме значення 0.
Вхідні дані
Вхід складається з невизначеної кількості (принаймні одного) наборів з трьох секцій:
Розмір сітки — один рядок, що містить одне ціле число N (1 ≤ N ≤ 9), яке представляє розмір куба будівель, що представлені.
Висоти будівель — N×N масив цілих чисел у діапазоні від 0 до N (включно). Кожен рядок у масиві подається на своєму власному рядку вводу, і елементи масиву не розділені. Цей початковий N×N масив представляє вид зверху на N×N суцільну структуру будівель з Lego, де кожне число представляє висоту будівлі у відповідному місці. Висота 0 вказує, що Lego у даному місці відсутній.
Серія команд обертання навколо центру N×N×N куба, що містить Lego, одна з:
"X" — обертає навколо горизонтальної осі в поточному виді. Куб обертається так, що грань куба, яка знаходиться вгорі поточного виду, рухається вперед, щоб стати новою видимою гранню.
"Y" — обертає навколо вертикальної осі в поточному виді. Куб обертається так, що грань куба, яка знаходиться зліва від поточного виду, рухається вперед, щоб стати новою видимою гранню.
"Z" — обертає навколо осі лінії зору в поточному виді. Видима грань не змінюється, але обертається на 90 градусів проти годинникової стрілки.
Ці команди є єдиним нерозривним рядком з не більше ніж 80 командами.
Між кожними двома наборами вхідних даних є рівно один порожній рядок. Не буде порожнього рядка перед першим набором вхідних даних або після останнього набору вхідних даних.
Неправильні вхідні дані не будуть надані.
Вихідні дані
Для кожного вхідного випадку вихід складається з N×N масиву чисел у діапазоні від 0 до N (включно), що представляє кінцевий вид для кожного вхідного масиву та його відповідного набору обертань. Вихідні масиви повинні бути розділені рівно одним порожнім рядком, і не повинно бути пробілів після останньої цифри останнього вихідного масиву. Так само перша цифра першого вихідного масиву повинна бути першим символом у виході.
Не повинно бути надлишкового виводу будь-якого роду.
Оскільки ця програма фактично генерує види 3-вимірних об'єктів, важливо бути дуже конкретним у описі того, як ці види обчислюються. Дивлячись на рисунок вище, зауважте, що куб має шість сторін, верх, ліву, нижню та праву позначено. Передня частина — це сторона куба, найближча до глядача, а задня — сторона, найдальша від глядача. Початковий вхідний вид призначений для представлення міста з Lego зверху. Кожне число представляє висоти будівлі у цьому місці (або відповідно, максимальну відстань від задньої частини куба для будь-якого Lego у цьому рядку та стовпці). Коли куб обертається, числа більше не вказують на висоту будівель, оскільки вид більше не є (обов'язково) видом зверху. Натомість числа продовжують представляти максимальну відстань від задньої частини куба для будь-якого Lego у цьому рядку та стовпці куба. Ідея полягає в тому, що числа представлятимуть ті Lego, які найближчі до глядача, і, отже, ті Lego, які видимі для глядача.