func_code_string: #include <bits/stdc++.h>   using namespace std;   const int M = 1e3 + 5;   long long int dp[M][12][M], inv[M], n, d, mod;   long long int pw(long long int a, long long int b) {     if (b == 0) return 1ll;     long long int p = pw(a, b / 2ll);     if (b % 2ll)       return p * p % mod * a % mod;     else       return p * p % mod;   }   int main() {     cin >> n >> d >> mod;     for (long long int i = 1; i <= n; i++) inv[i] = pw(i, mod - 2ll);     dp[1][0][0] = 1;     for (int i = 2; i <= n; i++)       for (int j = 1; j <= d; j++)         for (int k = (i - 1) / j; k <= i - 1; k++) {           dp[i][j][k] = dp[i][j][k - 1];           long long int cur = 1, buf = dp[k][d - 1][k - 1];           for (int t = 1; t <= j && t * k <= i - 1; t++) {             cur = cur * buf++ % mod * inv[t] % mod;             (dp[i][j][k] += dp[i - t * k][j - t][min(k - 1, i - t * k - 1)] *                             (cur + (k == 1))) %= mod;           }         }     long long int ans = dp[n][d][(n - 1) / 2];     if (n % 2 == 0)       (ans += dp[n / 2][d - 1][n / 2 - 1] * (dp[n / 2][d - 1][n / 2 - 1] + 1) %               mod * inv[2]) %= mod;     cout << (n <= 2 ? 1 : ans) << endl;   }   