There is a straight highway with N storages alongside it labeled by 1,2,3,...,N. Bob asks you to paint all storages with two colors: red and blue. Each storage will be painted with exactly one color.
Bob has a requirement: there are at least M continuous storages (e.g. "2,3,4" are 3 continuous storages) to be painted with red. How many ways can you paint all storages under Bob's requirement?
Input
There are multiple test cases.
Each test case consists a single line with two integers: N and M (0<N, M<=100,000).
Process to the end of input.
Output
One line for each case. Output the number of ways module 1000000007.
Sample Input
4 3
Sample Output
3
1 #include <stdio.h> 2 #include <string.h> 3 const int N = 1e5 + 5; 4 const int mod = 1e9 + 7; 5 int dp[N],pow[N]= {1}; 6 7 int main() 8 { 9 int n,m; 10 for(int i=1; i<N; i++) pow[i] = pow[i-1] * 2 % mod; 11 while(~scanf("%d%d",&n,&m)) 12 { 13 memset(dp,0,sizeof(int)*m); 14 dp[m] = 1; 15 for(int i=m+1; i<=n; i++) dp[i] = ((dp[i-1]*2 % mod + pow[i-m-1]-dp[i-m-1]) % mod + mod) % mod; 16 printf("%d\n",dp[n]); 17 } 18 return 0; 19 }