#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 355;
const ll MOD = 1e9 + 7;
ll dp[N][N], fact[N], invfact[N];
ll mult(ll a, ll b) {
return (a * b) % MOD;
}
ll sum(ll a, ll b) {
return (a + b >= MOD ? a + b - MOD : a + b);
}
ll binpow(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) res = mult(res, a);
a = mult(a, a);
b >>= 1;
}
return res;
}
ll C(ll n, ll k) {
if (k < 0 || k > n) return 0;
return mult(fact[n], binpow(mult(fact[k], fact[n - k]), MOD-2));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
fact[0] = 1;
for (int i = 1; i < N; i++) fact[i] = mult(fact[i - 1], i);
dp[1][1] = 1;
for (int i = 2; i <= n; i++) {
for (int j = 0; j <= n; j++) {
for (int k = 0; k <= j; k++) {
if (k == i)
dp[i][j] = sum(dp[i][j], mult(C(j, k), binpow(i - 1, j - k)));
else
dp[i][j] = sum(dp[i][j], mult(C(j, k), dp[i - 1][j - k]));
}
}
}
cout << dp[n][n] % MOD << '\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |