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