하노이에 시달리는 선생님

시간 제한2초메모리 제한512 MB

요약
합법적인 하노이 탑 배치가 주어졌을 때, 그 배치가 최적 해법 경로 위에 있는지 판별하고 경로 위에 있다면 목표까지 남은 이동 횟수를 출력한다.
난이도

보통10점 중 7점

유형
재귀, 분할 정복, 구현
정답자
아직 제출이 없습니다

문제

로버타는 작은 대학에서 수학을 가르치고, 이산수학 수업에서 하노이의 탑을 막 소개했다. 이 퍼즐에는 기둥 세 개와 반지름이 1,2,…,n1, 2, \ldots, n인 원반 nn개가 있다. 처음에는 원반이 모두 시작 기둥에 위에서 아래로 크기가 커지는 순서로 쌓여 있다. 다음 두 규칙을 지키면서 원반을 전부 목표 기둥으로 옮기는 것이 목적이다.

  1. 한 번에 원반 하나만 옮긴다.
  2. 어느 순간에도 큰 원반이 작은 원반 위에 놓여서는 안 된다.

원반이 nn개인 퍼즐의 최적 해법은 2n−12^n - 1번 이동하므로, 시작 배치와 목표 배치를 포함해 정확히 2n2^n가지 배치를 지나간다. 아래 그림은 n=3n = 3일 때의 최적 해법이고, 왼쪽이 시작 기둥, 오른쪽이 목표 기둥이다.

로버타는 학생들이 퍼즐을 푸는 동안 눈앞의 배치가 그 2n2^n가지 배치 중 하나인지 판단하고 싶다. 그런 배치라면 목표 배치, 즉 원반이 모두 목표 기둥에 아래에서 위로 크기가 작아지는 순서로 쌓인 상태까지 몇 번 더 옮겨야 하는지도 학생에게 알려주려 한다. 로버타가 부탁한 프로그램을 작성하라.

입력

세 줄이 주어지고 각 줄은 기둥 하나를 나타낸다. 각 줄은 그 기둥에 놓인 원반의 개수인 음이 아닌 정수 mm으로 시작하고, 이어서 원반 mm개의 번호가 기둥의 맨 아래부터 위쪽으로 순서대로 주어진다. 첫째 줄은 시작 기둥, 셋째 줄은 목표 기둥이다. 원반 번호는 11부터 nn까지 연속한 정수이며 번호가 곧 원반의 반지름이고, 1≤n≤501 \le n \le 50이다. 주어진 배치는 퍼즐 규칙에 맞는 배치이다. 즉 어느 기둥에서든 아래에서 위로 갈수록 반지름이 작아진다.

출력

주어진 배치가 최적 해법의 배치 수열에 들어 있지 않으면 No를 출력한다. 들어 있으면 목표 배치까지 남은 최소 이동 횟수를 출력한다.

예제6

  1. 예제 1

    입력
    1 3
    2 2 1
    0
    
    예상 출력
    4
    
  2. 예제 2

    입력
    1 3
    0
    2 2 1
    
    예상 출력
    No
    
  3. 예제 3

    입력
    0
    0
    1 1
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1 1
    0
    0
    
    예상 출력
    1
    
  5. 예제 5

    입력
    0
    1 1
    0
    
    예상 출력
    No
    
  6. 예제 6

    입력
    3 3 2 1
    0
    0
    
    예상 출력
    7