#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;

#define A first
#define B second

const ll p = 1e9+7;

ll n, k;
ll dp[105][205*205];

int main() {
	cin >> n >> k;
	for (int i = n; i >= 1; --i) {
		if (i == n) {
			if (k == n)
				dp[n][1] = 1;
			else
				dp[n][1] = 0;
			dp[n][0] = k+1 - dp[n][1];
			continue;
		}

		for (int j = 0; j <= k; ++j)
			for (int m = 0; m <= n*n; ++m) {
				if (j > i) {
					dp[i][m] = (dp[i][m] + dp[i+1][m])%p;
				} else {
					int y = j/i*i;
					if (y == 0)
						y += i;
					if (y < j)
						y += i;
					int z = (j+m)/i*i;
					int s = (z-y)/i + 1;
					if (s < 0)
						s = 0;

					dp[i][m + s] = (dp[i][m + s] + dp[i+1][m])%p;
				}
			}

		/* for (int m = 0; m <= n*n; ++m)
			cout << dp[i][m] << ' ';
		cout << endl; */

		//how to do exactly j things
	}

	ll ans = 1;
	for (int i = 0; i < n; ++i)
		ans = (ans*(k+1))%p;
	ans = ans*n%p*k%p*(p+1)/2%p;

	for (int i = 0; i <= n*n; ++i) {
		ans = (ans + p - dp[1][i]*i%p)%p;
	}

	cout << ans << endl;
}
### Prompt

Please provide a CPP coded solution to the problem described below:

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>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;

#define A first
#define B second

const ll p = 1e9+7;

ll n, k;
ll dp[105][205*205];

int main() {
	cin >> n >> k;
	for (int i = n; i >= 1; --i) {
		if (i == n) {
			if (k == n)
				dp[n][1] = 1;
			else
				dp[n][1] = 0;
			dp[n][0] = k+1 - dp[n][1];
			continue;
		}

		for (int j = 0; j <= k; ++j)
			for (int m = 0; m <= n*n; ++m) {
				if (j > i) {
					dp[i][m] = (dp[i][m] + dp[i+1][m])%p;
				} else {
					int y = j/i*i;
					if (y == 0)
						y += i;
					if (y < j)
						y += i;
					int z = (j+m)/i*i;
					int s = (z-y)/i + 1;
					if (s < 0)
						s = 0;

					dp[i][m + s] = (dp[i][m + s] + dp[i+1][m])%p;
				}
			}

		/* for (int m = 0; m <= n*n; ++m)
			cout << dp[i][m] << ' ';
		cout << endl; */

		//how to do exactly j things
	}

	ll ans = 1;
	for (int i = 0; i < n; ++i)
		ans = (ans*(k+1))%p;
	ans = ans*n%p*k%p*(p+1)/2%p;

	for (int i = 0; i <= n*n; ++i) {
		ans = (ans + p - dp[1][i]*i%p)%p;
	}

	cout << ans << endl;
}
```