#include <bits/stdc++.h>
#define all(v) v.begin(), v.end()
#define int long long
using namespace std;
const int sz = 351, mod = 1e9 + 7;
int n, f[sz], inv[sz], dp[2][sz][sz];
int bp(int a, int b, int r = 1)
{
while(b > 0)
{
if(b & 1) r = r * a % mod;
a = a * a % mod;
b >>= 1;
}
return r;
}
int C(int n, int k)
{
if(n < k) return 0;
return f[n] * inv[k] % mod * inv[n - k] % mod;
}
void solve()
{
cin >> n;
dp[0][0][0] = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= n; j++)
{
for(int cur = 0; cur <= j; cur++)
{
if(cur != i)
{
dp[0][i][j] = (dp[0][i][j] + dp[0][i - 1][j - cur] * C(j, cur)) % mod;
dp[1][i][j] = (dp[1][i][j] + dp[1][i - 1][j - cur] * C(j, cur)) % mod;
}
else
{
dp[1][i][j] = (dp[1][i][j] + (dp[1][i - 1][j - cur] + dp[0][i - 1][j - cur]) * C(j, cur)) % mod;
}
}
}
}
cout << dp[1][n][n];
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
f[0] = inv[0] = 1;
for(int i = 1; i < sz; i++)
{
f[i] = f[i - 1] * i % mod;
inv[i] = bp(f[i], mod - 2);
}
int t = 1;
// cin >> t;
while(t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |