#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heF9jb25zdCA9IGludCgxZTkrNyk7CgppbnQgbWF0cml4X3plbmlrKGludCBuLCBpbnQgaykKewoJaW50IG1hdHJpeFtuKzFdW24rMV1bbisxXTsKCWZvcihpbnQgaT0wO2k8PW47KytpKXsKCQlmb3IoaW50IGo9MDtqPD1uOysrail7CgkJCWZvcihpbnQgaz0wO2s8PW47KytrKXsKCQkJCW1hdHJpeFtpXVtqXVtrXT0wOwoJCQl9CgkJfQoJCW1hdHJpeFtpXVtpXVtpXT0xOwoJfQoJZm9yKGludCBzdGVwX2Zyb209MTtzdGVwX2Zyb208bjsrK3N0ZXBfZnJvbSl7CgkJZm9yKGludCBzdGVwX3RvPXN0ZXBfZnJvbSsxO3N0ZXBfdG88PW47KytzdGVwX3RvKXsKCQkJZm9yKGludCBtaW5faT0xO21pbl9pPD1zdGVwX2Zyb20rMTsrK21pbl9pKXsKCQkJCWludCBsYXN0ID0gbWluKG1pbl9pK2ssc3RlcF9mcm9tKzEpOwoJCQkJZm9yKGludCBtYXhfaT1taW5faTttYXhfaTw9bGFzdDsrK21heF9pKXsKCQkJCQlpbnQgbWluX3RvX3dyaXRlID0gbWluKG1pbl9pLHN0ZXBfdG8tc3RlcF9mcm9tKTsKCQkJCQlpbnQgbWF4X3RvX3dyaXRlID0gbWF4KG1heF9pLHN0ZXBfdG8tc3RlcF9mcm9tKTsKCQkJCQltYXRyaXhbc3RlcF90b11bbWluX3RvX3dyaXRlXVttYXhfdG9fd3JpdGVdICs9IG1hdHJpeFtzdGVwX2Zyb21dW21pbl9pXVttYXhfaV07CgkJCQkJaWYobWF0cml4W3N0ZXBfdG9dW21pbl90b193cml0ZV1bbWF4X3RvX3dyaXRlXT5tYXhfY29uc3QpewoJCQkJCQltYXRyaXhbc3RlcF90b11bbWluX3RvX3dyaXRlXVttYXhfdG9fd3JpdGVdLT1tYXhfY29uc3Q7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCQoJfQoJaW50IHN1bSA9MDsKCWZvcihpbnQgaT0wO2k8PW47KytpKXsKCQlmb3IoaW50IGo9MDtqPD1uOysrail7CgkJCXN1bSs9bWF0cml4W25dW2ldW2pdOwoJCQlpZihzdW0+bWF4X2NvbnN0KXsKCQkJCXN1bS09bWF4X2NvbnN0OwoJCQl9CgkJfQoJfQkKCXJldHVybiBzdW07Cn0KCmludCBtYWluKCkgewoJY291dDw8bWF0cml4X3plbmlrKDEwMCwxMDApOwoJcmV0dXJuIDA7Cn0=