Бікуб#3399

Бікуб

1 секунда
64 мегабайти
Дуже складна

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

Вона планує скласти ці вісім одиничних кубів з відкритою передньою стороною, а потім з них — бікуб. Бікуб — це куб розміром 2 \times 2 \times 2, що складається з восьми одиничних кубів, який повинен відповідати наступним умовам:

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

Вхідні дані

Вхід містить специфікацію аркуша. Перший рядок містить два цілі числа та , які позначають висоту та ширину аркуша (3 \le H, W \le 50). Далі йдуть рядків, кожен з яких складається з символів. Ці рядки показують квадрати на передній стороні аркуша. Символ представляє колір квадрата: літери та цифри ('A' до 'Z', 'a' до 'z', '0' до '9') для кольорових квадратів, решітка ('#') для чорного квадрата, і крапка ('.') для непофарбованого квадрата. Кожна літера або цифра позначає унікальний колір: квадрати мають однаковий колір, якщо і тільки якщо вони представлені одним і тим же символом.

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

Вихідні дані

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

Приклади

Приклад 1

Loading
Loading