Кораблі#629

Кораблі

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

Ймовірно, кожен, хто коли-небудь ходив до школи, знайомий із грою, у якій два гравці розміщують набір кораблів на сітці та намагаються знайти й знищити кораблі один одного шляхом здогадування їх розташування.

У нашій версії гри ви та ваш супротивник можете використовувати наступні сім шаблонів кораблів, розміщуючи їх на прямокутній сітці:

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

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

За цією інформацією визначте, чи можна знайти розташування усіх невідкритих клітинок 'x' з не більше ніж одним промахом. Тобто, чи можна відкрити всі невідкриті '.' клітинки, отримавши не більше однієї 'o' (промаху), перш ніж знайдуться всі клітинки 'x'? Іншими словами, вам дозволено натрапити на одну 'o', якщо це зробить решту розв'язку унікальною.

Вхідні дані

Вхідний файл містить декілька ігрових ситуацій. Кожен тестовий випадок починається з рядка, що містить два цілих числа та — ширину та висоту сітки, де 2 \leq w, h \leq 16.

Кожен із наступних рядків містить рядок з символів. Кожен символ — це 'x', 'o' або '.', залежно від стану відповідної клітинки.

Порожній рядок розділяє ігри між собою. Вхід закінчується випадком, де w = 0 та h = 0; цей випадок не обробляйте.

Вихідні дані

Для кожного тестового випадку спочатку виведіть номер гри (див. приклад виводу), потім виведіть 'yes.' (якщо ви можете знайти всі 'x' не більше ніж з одним промахом) або 'no.' (якщо для визначення всіх 'x' потрібно зробити щонайменше два промахи).

Після кожної гри виведіть порожній рядок.

Приклади

Приклад 1

Loading
Loading