Корабли
Наверное каждый, кто когда-либо учился в школе :) , знает, что есть игра, в которой двое игроков размещают какое-то множество кораблей листе бумаги в клеточку и попытаться уничтожить корабли друг друга, угадав их расположения.
В нашей версии игры разрешено использовать вам и вашему оппоненту следующие семь моделей кораблей, расставляя их на прямоугольную сетку в соответствующих квадратах
Каждый корабль на картинке занимает ровно четыре квадрата. Корабли можно поворачивать, но нельзя отзеркаливать. Гарантируется, что все корабли будут полностью размещены в пределах заданного прямоугольника, не перекрывать друг друга, и в то же время, касание другого корабля или его границы допускается.
Можете считать, что мы находимся в середине игры и несколько квадратов уже раскрыты. Вам будет предоставлено прямоугольную сетку с информацией о квадратах, представляющей текущее положение в игре позиций судов противника. Каждый квадратик отмечен одним из следующих символов:
'x' если в указанной клетке находится часть корабля
'o' если ни один корабль не находится в указанной клетке
'.' если эта клетка до сих пор не раскрыта
Имея эту информацию, вы должны решить, можно ли определить размещение всех остальных частей кораблей ("х"), совершив при этом не более чем один промаха, то есть, можете ли вы раскрыть все клетки с символом ".", не получив при этом более одного ответа о промахе ("о"), для того, чтобы раскрыть все клетки, которые будут обозначаться символом "х". По сути это означает, что вы имеете право совершить один промах ("о"), если после этого решение становится уникальным.
Входные данные
Входной файл содержит несколько игровых ситуаций. Каждый тест начинается со строки, содержащей два целых числа w и h. Они определяют ширину и высоту прямоугольника игры, при этом 2 ≤ w, h ≤ 16.
Каждая из последующих h строк содержит строку из w символов. Каждый из этих символов 'x', 'o' или '.', в зависимости от состояния соответствующей клетки.
Пустая строка отделяет каждую новую игру от предыдущей. Входной файл заканчивается данными с w = 0 и h = 0. Эта игру обрабатывать не нужно.
Выходные данные
Для каждого теста необходимо сначала вывести строку, содержащую номер игры (см. пример выходных данных), а затем строку, содержащая либо 'yes.' (если вы можете определить все 'x' совершив не более одного промаха), либо 'no.' (если вы не можете определить все 'x' без совершения, по меньшей мере, двух промахов).
Между разными играми необходимо вывести пустую строку.