func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100;   long long f[N + 5][N + 5][N + 5];   long long fac[N + 5], C[N + 5][N + 5];   long long mod;   long long dfs(int n, int m, int k) {     if (n == 0) return k == 0;     if (m == 1) return k == 1 ? fac[n] : 0;     if (n == 1) return k == 0;     if (2 * k > n + 1) return 0;     if (m > n) return k == 0 ? fac[n] : 0;     if (f[n][m][k] != -1) return f[n][m][k];     long long ans = 0;     for (int i = 0; i < n; i++)       for (int j = 0; j <= k; j++)         ans = (ans + C[n - 1][i] * dfs(i, m - 1, j) % mod *                          dfs(n - i - 1, m - 1, k - j) % mod) %               mod;     return f[n][m][k] = ans;   }   int main() {     memset(f, 0xff, sizeof(f));     int n, m, k;     scanf( %d%d%d%lld , &n, &m, &k, &mod);     for (int i = 0; i <= N; i++) C[i][0] = C[i][i] = 1;     for (int i = 1; i <= N; i++)       for (int j = 1; j < i; j++) C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;     fac[0] = fac[1] = 1;     for (int i = 1; i <= N; i++) fac[i] = fac[i - 1] * i % mod;     printf( %lld , dfs(n, m, k));     return 0;   }   