// ※※※ 解答不能 ※※※
// yokozuna57氏.
// https://atcoder.jp/contests/cf17-final/submissions/1805242
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL MOD = 1e9 + 7;
#define repx(i, a, b) for(LL i = a; i < b; i++)
#define rep(i, n) repx(i, 0, n)
#define repr(i, a, b) for(LL i = a; i >= b; i--)
LL dp[111][5050];

LL mPow(LL x, LL k){
    if(k == 0) return 1;
    LL ret = mPow(x, k / 2);
    ret *= ret;
    ret %= MOD;
    if(k % 2 == 1){
        ret *= x;
        ret %= MOD;
    }
    return ret;
}

int main(){
    LL N, K;
    scanf("%lld %lld", &N, &K);
    dp[K][0] = K;
    dp[K][1] = 1;
    repr(i, K - 1, 1){
        rep(j, 5050){
            dp[i][j] += dp[i + 1][j] * (K - i);
            dp[i][j + j / i] += dp[i + 1][j] * (i - j % i);
            dp[i][j + j / i + 1] += dp[i + 1][j] * (j % i + 1);
        }
        rep(j, 5050) dp[i][j] %= MOD;
    }
    
    LL ret = mPow(K + 1, K) * N * K;
    ret %= MOD;
    ret *= mPow(2, MOD - 2);
    ret %= MOD;
    repx(i, 1, 5049){
        dp[1][i] *= i;
        dp[1][i] %= MOD;
        ret += MOD - dp[1][i];
    }
    ret %= MOD;
    ret *= mPow(K + 1, N - K);
    ret %= MOD;
    printf("%lld\n", ret);
    return 0;
}