#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using lint = long long; using ld = long double; using pint = pair; using plint = pair; #define MOD 1000000007LL #define INF 1000000000LL #define EPS 1e-10 #define FOR(i,n,m) for(lint i=n;i<(int)m;i++) #define REP(i,n) FOR(i,0,n) #define DUMP(a) REP(d,a.size()){cout<> n >> k; if(n == 1) { cout << 0 << endl; return 0; } vector>> dp(k + 1, vector>(k + 10, vector(k + 10, 0))); REP(i, k + 1) REP(j, k + 10) REP(l, k + 10) { if(j >= l) continue; if(i == 0) { if(j == 0 && l == 1) dp[i][j][l] = 1; } else { if(j == 0) { dp[i][j][l] = (n - 1) * dp[i - 1][j][l]; dp[i][j][l] %= MOD; if(l > 1) dp[i][j][l] += dp[i - 1][j][l - 1]; dp[i][j][l] %= MOD; } else { dp[i][j][l] = (n - 2) * dp[i - 1][j][l]; dp[i][j][l] %= MOD; if(l - j > 1) { dp[i][j][l] += dp[i - 1][j][l - 1]; dp[i][j][l] %= MOD; } if(j) { dp[i][j][l] += dp[i - 1][j - 1][l]; dp[i][j][l] %= MOD; } else { dp[i][j][l] += dp[i - 1][j][l]; dp[i][j][l] %= MOD; } } } } lint ans = 0; FOR(i, 1, n + 1) { for(lint j = 0; j <= k; j++) { if(i + j <= n) { ans += i * dp[k][1 + j - 1][1 + j]; ans %= MOD; } } } cout << ans << endl; return 0; } /* --------------------------------------- */