#include <iostream>
using namespace std;

const int max_const = int(1e9+7);

int matrix_zenik(int n, int k)
{
	int matrix[n+1][n+1][n+1];
	for(int i=0;i<=n;++i){
		for(int j=0;j<=n;++j){
			for(int k=0;k<=n;++k){
				matrix[i][j][k]=0;
			}
		}
		matrix[i][i][i]=1;
	}
	for(int step_from=1;step_from<n;++step_from){
		for(int step_to=step_from+1;step_to<=n;++step_to){
			for(int min_i=1;min_i<=step_from+1;++min_i){
				int last = min(min_i+k,step_from+1);
				for(int max_i=min_i;max_i<=last;++max_i){
					int min_to_write = min(min_i,step_to-step_from);
					int max_to_write = max(max_i,step_to-step_from);
					matrix[step_to][min_to_write][max_to_write] += matrix[step_from][min_i][max_i];
					if(matrix[step_to][min_to_write][max_to_write]>max_const){
						matrix[step_to][min_to_write][max_to_write]-=max_const;
					}
				}
			}
		}
		
	}
	int sum =0;
	for(int i=0;i<=n;++i){
		for(int j=0;j<=n;++j){
			sum+=matrix[n][i][j];
			if(sum>max_const){
				sum-=max_const;
			}
		}
	}	
	return sum;
}

int main() {
	cout<<matrix_zenik(100,100);
	return 0;
}