Virtual contest is a way to take part in past contest, as close as possible to participation on time. It is supported only ACM-ICPC mode for virtual contests.
If you've seen these problems, a virtual contest is not for you - solve these problems in the archive.
If you just want to solve some problem from a contest, a virtual contest is not for you - solve this problem in the archive.
Never use someone else's code, read the tutorials or communicate with other person during a virtual contest.

No tag edit access

C. Yet Another Number Sequence

time limit per test

1 secondmemory limit per test

256 megabytesinput

standard inputoutput

standard outputEveryone knows what the Fibonacci sequence is. This sequence can be defined by the recurrence relation:

We'll define a new number sequence *A*_{i}(*k*) by the formula:

In this problem, your task is to calculate the following sum: *A*_{1}(*k*) + *A*_{2}(*k*) + ... + *A*_{n}(*k*). The answer can be very large, so print it modulo 1000000007 (10^{9} + 7).

Input

The first line contains two space-separated integers *n*, *k* (1 ≤ *n* ≤ 10^{17}; 1 ≤ *k* ≤ 40).

Output

Print a single integer — the sum of the first *n* elements of the sequence *A*_{i}(*k*) modulo 1000000007 (10^{9} + 7).

Examples

Input

1 1

Output

1

Input

4 1

Output

34

Input

5 2

Output

316

Input

7 4

Output

73825

Codeforces (c) Copyright 2010-2019 Mike Mirzayanov

The only programming contests Web 2.0 platform

Server time: Mar/24/2019 02:38:07 (d2).

Desktop version, switch to mobile version.

Supported by

User lists

Name |
---|