Ханойські вежі#3989

Ханойські вежі

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

Кожен програміст знає головоломку "Ханойські вежі". Коротко нагадаємо її умову.

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

Необхідно перенести усі диски зі стержня на стержень , використовуючи стержень як додатковий.

За один крок дозволяється зняти один верхній диск і покласти його або на порожній стержень, або на стержень, верхній диск якого має більший діаметр.

Майже усі книги з програмування містять рекурсивне розв'язання задачі. Наприклад, нижче наведено розв'язок на мові Паскаль.

Procedure Hanoi (, , : integer; :integer);

Begin

If N > 0 then

Begin

Hanoi (, , , N-1);

Writeln('Disk ', , ' from ', , ' to ', );

Hanoi (, , , N-1)

End

End;

Відомо, що наведений вище розв'язок вимагає виконання (2^n - 1) кроків. З врахуванням початкового розміщення, є всього 2^n комбінацій розміщення дисків на трьох стержнях. Деякі комбінації ніколи не зустрічаються під час виконання алгоритму. Наприклад, комбінація "" ніколи не зустрінеться у грі при n=3 (найменший диск розміщено на стержні , середній на стержні , а найбільший на ).

Напишіть програму, яка встановить, чи зустрінеться у грі задана комбінація.

Вхідні дані

Перший рядок містить кількість дисків (1 \leq n \leq 250). Другий рядок містить великих букв ("", "" або "") – розміщення дисків на стержнях. Перша (сама ліва) буква задає позицію (ім'я стержня) найменшого диску, друга буква – позицію другого найменшого і так далі…

Вихідні дані

Вивести "YES" або "NO" у залежності від того, чи досяжна у грі задана комбінація.

Приклади

Приклад 1

Loading
Loading