여우의 꿈

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

요약
K번 기둥에 모여 있는 N개의 원판을 목표 배치 a_i로 옮기는 최소 이동 횟수를 10^9+7로 나눈 나머지로 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

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

문제

여우 마을에는 33개의 기둥과 NN개의 원판을 가진 하노이 탑의 원판들을 한 곳에 모으면 소원이 이루어진다는 전설이 있다.

하노이 탑의 원판들을 이동시키는 규칙은 다음과 같다.

  • ii번째 원판의 반지름은 ii이다. (1≤i≤N1\le i\le N)
  • 어떤 시점에라도 한 기둥 안의 원판은 반지름이 작을수록 위로 오도록 정렬되어 있어야 한다.
  • 각 기둥의 제일 위에 있는 원판만 이동할 수 있다.
  • 원판은 기둥의 맨 위로만 이동할 수 있다.
  • 원판은 한 번에 한 개만 이동할 수 있다.

여우 마을에 사는 아기 여우는 어느 날 이 소문을 듣고 하노이 탑에 도전하기로 했다. 아기 여우는 모든 원판을 KK번째 기둥에 모으는 데 성공했고, 소원을 빌었다.

"세상에서 가장 귀여운 여우가 되게 해주세요!"

하지만 아기 여우에게는 아무런 변화도 일어나지 않았다.

실망한 아기 여우는 이번에는 자신이 생각하기에 아름다운 모양으로 원판을 배치해 보기로 했다. 이제는 하노이 탑의 고수가 된 아기 여우는 11초에 한 개의 원판을 옮길 수 있다. 아기 여우가 원판을 아름다운 모양으로 배치하는 데 걸리는 최소 시간을 구해 보자!

입력

첫 번째 줄에 NN과 KK가 공백을 사이에 두고 입력된다. (1≤N≤1,000,0001\le N \le 1\\, 000\\, 000; 1≤K≤31\le K \le3)

두 번째 줄에 NN개의 수가 공백을 사이에 두고 입력된다. ii번째 수 a_ia\_i는 ii번째 원판이 아름다운 모양에서 몇 번째 기둥에 있는지 의미한다. (1≤a_i≤31\le a\_i \le 3)

아기 여우가 생각한 아름다운 모양은 하노이 탑의 규칙을 만족한다.

출력

첫 번째 줄에 아기 여우가 아름다운 모양을 만드는 데 걸리는 최소 시간(초)을 109+710^{9} + 7로 나눈 나머지를 출력한다. 109+710^{9} + 7은 소수이다.

아름다운 모양을 만드는 것이 불가능하면 -1을 출력한다.

힌트

여우 마을의 전설은 사실일까요?

예제3

  1. 예제 1

    입력
    3 3
    2 3 2
    
    예상 출력
    6
    
  2. 예제 2

    입력
    9 2
    3 1 1 2 2 3 2 2 2
    
    예상 출력
    57
    
  3. 예제 3

    입력
    1 1
    1
    
    예상 출력
    0