해적 코드
시간 제한2초메모리 제한1024 MB
길이가 k인 모든 이진 코드를 피보나치 기반으로 해독한 값의 합을 k=1부터 n까지 10^9+7로 나눈 나머지로 구합니다.
문제
선장 마르트리나와 해적 선원들은 이탈리아에서 가장 유명한 해적이 남긴 오래된 보물을 3개월 동안 찾아다닌 끝에, 금화가 가득 든 상자를 마침내 파냈다. 상자를 열려면 비밀 조합이 필요하다. 그 조합은 상자 옆에 있던 병 속 편지에 적혀 있다.
편지에는 다음과 같이 적혀 있다:

가장 가치 있는 해적만 상자를 열 수 있도록, 조합은 다음 문제의 답이다. 길이가 인 이진 수열 에서 연속한 1의 쌍이 수열의 끝에만 있을 때, 이 수열을 수 의 해적 표현이라 한다. 그 조건은 다음과 같다.
여기서 는 번째 피보나치 수이다. 피보나치 수는 , 이고, 인 모든 에 대해 로 정의된다.
예를 들어 , , 이다. 여기서 는 수의 해적 표현을 나타낸다.
해적 코드는 연속한 1에 대한 제약이 없는 이진 수열이며, 양의 정수들의 수열을 나타낸다. 이를 읽으려면 각 부분이 어떤 수의 해적 표현이 되도록, 가능한 한 많은 부분으로 나눈다. 어떤 수의 해적 표현도 아닌 접미사가 남을 수 있으며, 이때 그 접미사는 버린다. 이후 각 부분의 정수를 순서대로 적는다. 예를 들어 은 011|11|01011|0101로 나뉜다. 마지막 부분은 해적 표현이 아니므로 버려져 011|11|01011이 남고, 이는 수열 , , 로 읽힌다.
해적 코드의 값은 해독된 양의 정수 수열의 값의 합이다. 앞의 코드의 값은 이다.
내가 좋아하는 수 는 길이가 인 모든 해적 코드 값의 합이다. 이 수는 클 수 있으므로, 상자의 비밀 조합은 를 로 나눈 나머지이다.
마르트리나가 상자를 열지 못하면 선원들은 그녀를 가치 없다고 여겨 널빤지 위를 걷게 만들 것이다.
- Leonarrrdo da Pisa
입력
첫 번째이자 유일한 줄에 양의 정수 이 주어진다. ()
출력
한 줄에 개의 수를 출력한다. 번째 수는 길이가 인 코드 문제의 답이다.
설명
길이가 인 코드는 과 이며, 둘 다 값이 이다.
코드 의 값은 이고, 길이가 인 나머지 코드의 값은 모두 이다.
코드 의 값은 이고, 코드 의 값은 이다.