Виртуальное соревнование – это способ прорешать прошедшее соревнование в режиме, максимально близком к участию во время его проведения. Поддерживается только ICPC режим для виртуальных соревнований.
Если вы раньше видели эти задачи,
виртуальное соревнование не для вас – решайте эти задачи в архиве.
Если вы хотите просто дорешать задачи, виртуальное соревнование не для вас – решайте эти задачи в архиве.
Запрещается использовать чужой код, читать разборы задач и общаться по содержанию соревнования с кем-либо.
Все знают, что такое ряд чисел Фибоначчи. Это последовательность, которую можно определить следующим рекуррентным соотношением:
F1 = 1, F2 = 2, Fi = Fi - 1 + Fi - 2 (i > 2).
Определим новую последовательность чисел Ai(k) следующей формулой:
Ai(k) = Fi × ik (i ≥ 1).
В этой задаче вам требуется посчитать следующую сумму: A1(k) + A2(k) + ... + An(k). Ответ может быть очень большим, поэтому выведите его по модулю 1000000007(109 + 7).
Входные данные
В первой строке записано два целых числа через пробел n, k(1 ≤ n ≤ 1017; 1 ≤ k ≤ 40).
Выходные данные
Выведите единственное целое число — сумму первых n элементов последовательности Ai(k) по модулю 1000000007(109 + 7).