#include<bits/stdc++.h>
#define pb push_back
#define ins insert
#define F first
#define S second
#define var auto
using namespace std;

typedef long long ll;
const int Max = 110;
const int Max2 = 10100;
const int Mod = 1e9 + 7;


ll pw(int a , int b)
{
	if(b == 0)
		return 1;
	ll half = pw(a , b / 2);
	if(b % 2)
		return half * half % Mod * a % Mod;
	return half * half % Mod;
}

ll dp[Max][Max2];//num of ways that indexes in the range [i , n] get exactly j times candidated (in sum)

int main()
{
	int n , k;cin >> n >> k;
	int n2 = n * n;
	if(k == n)
	{
		dp[n][1] = 1;
		dp[n][0] = k;
	}
	else
	{
		dp[n][0] = k + 1;
	}
	for(int i = n; --i;)
	{
		for(int j = 0; j <= n2 ; j++)
		{
			for(int a = 0; a <= i && a <= k; a++)
			{
				int ub = ((j + 2) * i - a) / (i + 1);
				int lb = ((j + 1) * i - a) / (i + 1);
				for(int x = lb;x < ub;x++)
				{
					if(x <= n2)
						dp[i][j] += dp[i + 1][x];
				}
			}
			if(k > i)
				dp[i][j] += (k - i) * dp[i + 1][j];
			dp[i][j] %= Mod;
		}
	}

	ll totalSum = (k * (k + 1) / 2) * n % Mod * pw(k + 1 , n - 1) % Mod;
	/*for(int j = 0; j <= n2; j++)
		cout << dp[1][j] << '\t';
	cout << '\n';*/
	ll negation = 0;
	for(int j = 1; j <= n2; j++)
	{
		negation = (negation + dp[1][j] * j) % Mod;
	}
	/*cout << totalSum << '\n';*/
	cout << (totalSum - negation + Mod) % Mod << '\n';;
}

### Prompt

Generate a cpp solution to the following problem:

Consider the following game:

* The game is played using a row of N squares and many stones.
* First, a_i stones are put in Square i\ (1 \leq i \leq N).
* A player can perform the following operation as many time as desired: "Select an integer i such that Square i contains exactly i stones. Remove all the stones from Square i, and add one stone to each of the i-1 squares from Square 1 to Square i-1."
* The final score of the player is the total number of the stones remaining in the squares.



For a sequence a of length N, let f(a) be the minimum score that can be obtained when the game is played on a.

Find the sum of f(a) over all sequences a of length N where each element is between 0 and K (inclusive). Since it can be extremely large, find the answer modulo 1000000007 (= 10^9+7).

Constraints

* 1 \leq N \leq 100
* 1 \leq K \leq N

Input

Input is given from Standard Input in the following format:


N K


Output

Print the sum of f(a) modulo 1000000007 (= 10^9+7).

Examples

Input

2 2


Output

10


Input

20 17


Output

983853488

### Response

```cpp
#include<bits/stdc++.h>
#define pb push_back
#define ins insert
#define F first
#define S second
#define var auto
using namespace std;

typedef long long ll;
const int Max = 110;
const int Max2 = 10100;
const int Mod = 1e9 + 7;


ll pw(int a , int b)
{
	if(b == 0)
		return 1;
	ll half = pw(a , b / 2);
	if(b % 2)
		return half * half % Mod * a % Mod;
	return half * half % Mod;
}

ll dp[Max][Max2];//num of ways that indexes in the range [i , n] get exactly j times candidated (in sum)

int main()
{
	int n , k;cin >> n >> k;
	int n2 = n * n;
	if(k == n)
	{
		dp[n][1] = 1;
		dp[n][0] = k;
	}
	else
	{
		dp[n][0] = k + 1;
	}
	for(int i = n; --i;)
	{
		for(int j = 0; j <= n2 ; j++)
		{
			for(int a = 0; a <= i && a <= k; a++)
			{
				int ub = ((j + 2) * i - a) / (i + 1);
				int lb = ((j + 1) * i - a) / (i + 1);
				for(int x = lb;x < ub;x++)
				{
					if(x <= n2)
						dp[i][j] += dp[i + 1][x];
				}
			}
			if(k > i)
				dp[i][j] += (k - i) * dp[i + 1][j];
			dp[i][j] %= Mod;
		}
	}

	ll totalSum = (k * (k + 1) / 2) * n % Mod * pw(k + 1 , n - 1) % Mod;
	/*for(int j = 0; j <= n2; j++)
		cout << dp[1][j] << '\t';
	cout << '\n';*/
	ll negation = 0;
	for(int j = 1; j <= n2; j++)
	{
		negation = (negation + dp[1][j] * j) % Mod;
	}
	/*cout << totalSum << '\n';*/
	cout << (totalSum - negation + Mod) % Mod << '\n';;
}

```