#include<bits/stdc++.h>

using namespace std;

#define int long long

const int   N   = 102;
const int   mod = 1e9 + 7;

void add(int &a,int b)  {
    a += b;
    if(a >= mod)a -= mod;
    if(a < 0)   a += mod;
}

int qpow(int a,int exp) {
    int ans = 1;
    while (exp) {
        if(exp & 1) ans = ans * a % mod;
        a = a * a % mod;  exp >>= 1;
    }
    return ans;
}

int f[N][N * N];

signed main()   {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, k;   cin >> n >> k;

    f[n + 1][0] = 1;

    int lim = 0;

    for(int i = n ; i >= 1 ; --i)   {
        for(int p = 0 ; p <= lim ; ++p)
            for(int j = 0 ; j <= k ; ++j)   {
                if(j > i)   add(f[i][p],f[i + 1][p]);
                else        add(f[i][p + (j + p) / i],f[i + 1][p]);
            }
        lim = lim + lim / i + 1;
        while(!f[i][lim])   --lim;
    }

    int ans = qpow(k + 1,n - 1) * k * (k + 1) * n / 2;
        ans %= mod;

    for(int p = 0 ; p <= lim ; ++p)
        add(ans,-p * f[1][p] % mod);

    cout << (ans + mod) % mod << endl;
}
