Кожен програміст знає головоломку "Ханойські вежі". Коротко нагадаємо її умову.
Є стержні: , , . Спочатку дисків різного діаметру розміщено на стержні : найменший диск розміщено зверху, і далі донизу за збільшенням діаметру. Другий та третій стержні порожні.
Необхідно перенести усі диски зі стержня на стержень , використовуючи стержень як додатковий.
За один крок дозволяється зняти один верхній диск і покласти його або на порожній стержень, або на стержень, верхній диск якого має більший діаметр.
Майже усі книги з програмування містять рекурсивне розв'язання задачі. Наприклад, нижче наведено розв'язок на мові Паскаль.
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