타일링

3×W 직사각형을 2×1 도미노로 빈틈없이 채우는 방법의 수를 세어 10^9+7로 나눈 나머지를 출력한다.

보통5동적 계획법조합론수학재귀아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

도미노는 2×12 \times 1 크기의 직사각형 조각이고, 두 칸에는 각각 1부터 6까지의 수가 하나씩 적혀 있다. 원래는 게임에 쓰는 조각이지만 여기서는 다른 용도로 쓴다.

도미노를 겹치지 않게, 빈틈도 남기지 않게 놓으면 너비가 WW이고 높이가 3인 직사각형을 채울 수 있다. 이렇게 채우는 방법이 몇 가지인지 세는 것이 목표다. 조각에 적힌 수는 아무 역할도 하지 않으므로, 놓인 도미노의 위치와 방향이 하나라도 다르면 서로 다른 방법으로 센다.

아래 그림은 너비가 2이고 높이가 3인 직사각형을 채우는 세 가지 방법이다.

너비가 커지면 채우는 방법도 많아진다. 예를 들어 너비가 12일 때 가능한 답 하나는 다음과 같다.

너비가 WW이고 높이가 3인 직사각형을 도미노로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 직사각형의 너비 WW가 주어진다. 1W10001 \le W \le 1000이다.

출력

첫째 줄에 채우는 방법의 수를 출력한다. 이 값이 매우 커질 수 있으므로 10000000071000000007 (109+710^9 + 7)로 나눈 나머지를 출력한다.

힌트

W=56W = 56일 때 실제 방법의 수는 81551035427317538155103542731753이고, 출력해야 하는 값은 이 수를 109+710^9 + 7로 나눈 나머지다.