Гіперкуб#7568

Гіперкуб

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

Розгляньмо -гіперкуб, відомий як тесеракт. Одиничний цільний тесеракт — це фігура, яка є опуклою оболонкою точок з декартовими координатами (, , , ), що є його вершинами. Він має ребра (), квадратні грані () і кубічних -граней (), відомих як комірки. Ми будемо вивчати порожнисті тесеракти і визначимо тесеракт як межу цільного тесеракта. Тобто тесеракт є об'єднанням цільних кубів (його комірок), які перетинаються між собою по квадратним граням, ребрам і вершинам.

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

У цій задачі вам дано деревоподібний -полікуб у просторі, відомий як октокуб. Октокуб — це колекція одиничних кубічних комірок, з'єднаних одна з одною гранями. Більш формально, перетин кожної пари кубічних комірок, що складають октокуб, або порожній, або точка, або одиничний відрізок (), або одиничний квадрат (). Даний октокуб є деревоподібним у наступному сенсі. Розгляньмо граф суміжності октокуба — граф з вершинами, що відповідають його коміркам. Між парами сусідніх комірок у графі суміжності існує ребро. Дві комірки октокуба є суміжними, якщо їх перетином є квадрат. Комірки, що перетинаються по точці або по відрізку, не вважаються суміжними. Октокуб називається деревоподібним, якщо його граф суміжності є деревом.

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

Наприклад, подивіться нижче на ліву картинку. Вона показує дротяну рамку деревоподібного октокуба. Обертайте комірку GHLKG[1]H[1]L[1]K[1] навколо площини GHLK і комірку FGKJF[2]G[2]K[2]J[2] навколо площини FGKJ на кут градусів у -му вимірі поза оригінальною гіперплощиною. У результаті точка G[1] з'єднається з G[2], а точка K[1] з'єднається з K[2]. Грань GKK[2]G[2] склеїться з гранню GKK[1]G[1]. Результат показано справа. -й вимір ортогонально спроєктовано на і показано в перспективі. Точки, які вийшли з вихідної гіперплощини, позначені порожніми точками.

prb7568.gif

Обертайте EFJIE[1]F[1]J[1]I[1] навколо EFJI і EHLIE[2]H[2]L[2]I[2] навколо EHLI. Результат показано на рисунку зліва. Інші кроки наступні. Обертайте MNOPQRST навколо MNOP, потім обертайте MNOPQRST і IJKLMNOP навколо IJKL і обертайте ABCDEFGH навколо EFGH. Останній крок — склеювання всіх граней разом для отримання тесеракта, який показано справа.

prb7568_1.gif

Вхідні дані

Перший рядок містить три цілі числа , , — ширину, глибину і висоту коробки, що містить заданий октокуб (1 \le m, n, k \le 8). Наступні груп рядків описують прямокутні шари коробки зверху вниз. Кожен шар описується рядками по символів. Рядок містить символи '.' — порожнє місце, або 'x' — одиниця куба. Вхідні дані гарантовано описують деревоподібний октокуб.

Вихідні дані

Виведіть слово "Yes", якщо заданий октокуб можна скласти в тесеракт, і "No" інакше.

Приклади

Приклад 1

Loading
Loading