Фішка на мінному полі — 2

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 2,00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Problem types

На прямокутному полі ~N{\times}M~ клітинок у лівому верхньому кутку стоїть фішка. Ця кутова клітинка гарантовано вільна (не замінована); абсолютно кожна інша клітинка поля може бути хоч вільною, хоч замінованою. Гра полягає в тому, що два гравці поперемінно рухають згадану фішку на якусь кількість клітинок праворуч або донизу (кожен гравець сам вирішує, в якому з цих двох напрямків і на скільки клітинок рухати; не можна ні лишати фішку на місці, ні ставати нею в заміновану клітинку, ні перестрибувати нею через заміновану клітинку). Програє той, хто не може нікуди походити (і знизу, і праворуч або край поля, або міна). Відповідно, його суперник виграє.

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

Вхідні дані

Перший рядок містить два цілі числа ~N~ та ~M~, розділені одним пропуском (пробілом) – спочатку кількість рядків, потім кількість стовпчиків. Обидва ці значення у межах від 1 до 2023.

Далі йдуть ~N~ рядків, що задають мінне поле. Кожен з них містить рівно по ~M~ символів . (позначає вільну клітинку) та/або * (позначає заміновану клітинку). Ці символи йдуть без роздільників, і кожен з цих ~N~ рядків містить лише ці символи та переведення рядка наприкінці.

Результати

Перший рядок має містити єдине ціле число, або 1 (якщо перший гравець може забезпечити собі виграш), або 2 (якщо другий). Якщо відповідь з першого рядка 2, то на цьому виведення слід припинити. А якщо відповідь з першого рядка 1, то далі треба вивести також перелік всіх можливих перших ходів першого гравця, після яких другий (при правильній грі першого) вже ніяк не зможе виграти. Цей перелік виводити в такому форматі: спочатку, якщо існує виграшний хід униз, то вивести його як велику латинську літеру D, одинарний пропуск (пробілом) та довжину ходу (на скільки клітинок іти вниз); потім, якщо існує виграшний хід направо, то аналогічно, але на початку велику латинську R. (Заодно доведіть, що в цій задачі не може бути багатьох виграшних ходів униз чи багатьох виграшних ходів направо.)

Приклади

Вхід

2 4
....
.**.

Результат

1
D 1
R 2

Вхід

1 1
.

Результат

2

Примітки

Спочатку детально проаналізуємо перший приклад.

Перший гравець може піти D 1 (на одну клітинку вниз), після чого другому не буде куди йти. А ще перший гравець може піти першим ходом R 2; тоді другому не лишиться ніякого вибору, крім як піти R 1 (на ще одну клітинку праворуч), після чого перший іде D 1 (вниз), і знову другому не буде куди йти.

Перший хід R 3 не виграшний, бо після нього другий гравець іде D 1 і виграє. Перший хід R 1 теж не виграшний, бо тут може бути як ситуація «другий піде R 2, перший D 1 і виграє», так і ситуація «другий піде R 1, перший не матиме іншого вибору, як іти R 1, другий піде D 1 і виграє». Тобто, в разі першого ходу першого гравця R 1 другий гравець може перехопити ініціативу, якщо зуміє. А питали перелік таких ходів, щоб другий (при правильній грі першого) вже ніяк не міг виграти.

У другому прикладі, першому гравцю відразу ж нема куди йти, і він негайно програє (відповідно, виграє другий гравець).


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.