eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

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

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

Ломиголовка "Ханойські вежі" досить відома. Є 3 пронумерованих кілочка: #\textbf{1}, #\textbf{2} та #\textbf{3}. \textbf{N} дисків різного діаметру знаходяться на першому кілочку у наступному порядку: чим нижче знаходиться диск, тим більший діаметр він має. Необхідно перенести усі диски на другий кілочок, використовуючи кілочок #\textbf{3} як додатковий. Згідно павил за один хід можна перенести лише один самий верхній диск. При цьому заороняється класти диск більшого діаметру на диск меншого діаметру. Розподіл дисків по кілочкам під час гри будемо описувати послідовністю \textbf{D} (елемент #\textbf{i} послідовності дорівнює номеру кілочка, на якому знаходиться диск #\textbf{i}). Наприклад, стан гри після третього переміщення однозначно визначається послідовністю \textbf{D = (3, 3, 1)} (перший та другий диски знаходяться на третьому кілочку, а третій диск на кілочку #\textbf{1}). Приклад. Нехай \textbf{3} диски розміщено на кілочку #1. Переміщення дисків відобразимо у наступній таблиці (диски пронумеровано у порядку зростання діаметру): Ваша задача - визначити (використовуючи двільну послідовність D) кількість кроків від початку гри, за яку можна отримати задану позицію у випадку оптимального виконання алгоритму. Якщо це здійснити неможливо, то вивести "\textbf{-1}" - випадк має місце, якщо задана некоректна послідовність (тобто задана послідовність не може бути отимана в результаті виконання оптимального алгоритму). Довідка. Оптимальний алгоритм описується наступною рекурсивною процедурою. procedure Hanoi(N:integer; From, To_, Temp : integer);Begin if N>0 then begin Hanoi(N-1, From, Temp, To_); writeln (N, From, To_); Hanoi(N-1, Temp, To_, From) endEnd; Наприклад, для перенесення \textbf{5} дисків достатньо викликати \textbf{Hanoi(5,1,2,3)} Вказівка. Очевидно, що під час гри розміщення дисків на усіх кілочках (#\textbf{1}, #\textbf{2}, #\textbf{3}) ніколи не повторюється, тому відповідь завжди визначена. \InputFile Перший рядок містить ціле число \textbf{N} (\textbf{1} ≤ \textbf{N} ≤ \textbf{31}). Наступні \textbf{N} послідовних рядків містять цілі числа \textbf{D_1}, \textbf{D_2}, …, \textbf{D_N}. \textbf{1} ≤ \textbf{D_1}, \textbf{D_2}, …, \textbf{D_N} ≤ \textbf{3}. \OutputFile Вивести або кількість ходів, або \textbf{−1}.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
3
3
3
1
Вихідні дані #1
3
Джерело NEERC 2000 Central Subregional, Rybinsk State Avia Academy