#include <bits/stdc++.h>
using namespace std;

const int mod = 1000000007, inv2 = 500000004;

long long dp[110][10010];

void add(long long &a, long long b){
	a = (a + b) % mod; 
}

long long power(int a, int b){
	if (!b) return 1;
	long long tmp = power(a, b >> 1);
	return b & 1 ? tmp * tmp % mod * a % mod : tmp * tmp % mod;
}

int main(){
	int n, K; scanf("%d%d", &n, &K);
	dp[n - 1][0] = K == n ? K : K + 1;
	dp[n - 1][1] = K == n ? 1 : 0;
	for (int i = n - 1; i >= 1; i--){
		for (int j = 0; j <= 10000; j++){
			if (!dp[i][j]) continue;
			for (int k = 0; k <= min(i, K); k++){
				int cnt = (k + j) / i, last = (k + j) % i;
				add(dp[i - 1][j + cnt], dp[i][j]);
			}
			for (int k = i + 1; k <= K; k++){
				add(dp[i - 1][j], dp[i][j]);
			}
		}
	}
	long long ans = 1ll * n * power(K + 1, n - 1) % mod * K % mod * (K + 1) % mod * inv2 % mod;
	for (int i = 0; i <= 10000; i++){
		ans = ((ans - i * dp[0][i]) % mod + mod) % mod;
	}
	printf("%lld\n", ans);
	return 0;
}

### Prompt

In CPP, your task is to solve 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>
using namespace std;

const int mod = 1000000007, inv2 = 500000004;

long long dp[110][10010];

void add(long long &a, long long b){
	a = (a + b) % mod; 
}

long long power(int a, int b){
	if (!b) return 1;
	long long tmp = power(a, b >> 1);
	return b & 1 ? tmp * tmp % mod * a % mod : tmp * tmp % mod;
}

int main(){
	int n, K; scanf("%d%d", &n, &K);
	dp[n - 1][0] = K == n ? K : K + 1;
	dp[n - 1][1] = K == n ? 1 : 0;
	for (int i = n - 1; i >= 1; i--){
		for (int j = 0; j <= 10000; j++){
			if (!dp[i][j]) continue;
			for (int k = 0; k <= min(i, K); k++){
				int cnt = (k + j) / i, last = (k + j) % i;
				add(dp[i - 1][j + cnt], dp[i][j]);
			}
			for (int k = i + 1; k <= K; k++){
				add(dp[i - 1][j], dp[i][j]);
			}
		}
	}
	long long ans = 1ll * n * power(K + 1, n - 1) % mod * K % mod * (K + 1) % mod * inv2 % mod;
	for (int i = 0; i <= 10000; i++){
		ans = ((ans - i * dp[0][i]) % mod + mod) % mod;
	}
	printf("%lld\n", ans);
	return 0;
}

```