Бікуб
Мері Томас має кілька аркушів з квадратами. Деякі з квадратів на передній стороні пофарбовані або в чорний, або в якийсь кольоровий колір (наприклад, червоний чи синій). Відрізавши непофарбовану частину, вона отримує вісім розгорнутих одиничних кубів. Одиничний куб — це куб, кожна грань якого складається з одного квадрата.
Вона планує скласти ці вісім одиничних кубів з відкритою передньою стороною, а потім з них — бікуб. Бікуб — це куб розміром 2×2×2, що складається з восьми одиничних кубів, який повинен відповідати наступним умовам:
грані одиничних кубів, що знаходяться всередині бікуба, повинні бути чорними;
кожна грань бікуба має бути однорідного кольорового кольору; і
всі грані бікуба повинні мати різні кольори.
Ваше завдання — написати програму, яка зчитує специфікацію аркуша з квадратами і визначає, чи можна побудувати бікуб з восьми одиничних кубів, отриманих з нього.
Вхідні дані
Вхід містить специфікацію аркуша. Перший рядок містить два цілі числа H та W, які позначають висоту та ширину аркуша (3 ≤ H, W ≤ 50). Далі йдуть H рядків, кожен з яких складається з W символів. Ці рядки показують квадрати на передній стороні аркуша. Символ представляє колір квадрата: літери та цифри ('A' до 'Z', 'a' до 'z', '0' до '9') для кольорових квадратів, решітка ('#') для чорного квадрата, і крапка ('.') для непофарбованого квадрата. Кожна літера або цифра позначає унікальний колір: квадрати мають однаковий колір, якщо і тільки якщо вони представлені одним і тим же символом.
Кожен компонент з'єднаних квадратів утворює один розгорнутий куб. Квадрати вважаються з'єднаними, коли вони мають спільне ребро; ті, що мають лише спільну вершину, не вважаються з'єднаними.
Вихідні дані
Виведіть "Yes", якщо бікуб можна побудувати з даного аркуша; "No" в іншому випадку.