#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';;
}
