#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1111;
int inv[11], dp[MAXN][11][MAXN], n, D, MOD;
inline int Fpw(int x, int K, int MOD) {
  int ret = 1;
  for (; K; K >>= 1) {
    if (K & 1) ret = (long long)ret * x % MOD;
    x = (long long)x * x % MOD;
  }
  return ret;
}
int main() {
  scanf("%d%d%d", &n, &D, &MOD);
  for (int i = 1; i <= D; ++i) inv[i] = Fpw(i, MOD - 2, MOD);
  dp[1][D - 1][0] = 1;
  dp[1][0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= D; ++j)
      for (int k = 1; k <= n; ++k) {
        dp[i][j][k] = dp[i][j][k - 1];
        if (!dp[k][D - 1][k - 1] || i == 1) continue;
        int tmp = 1;
        for (int t = 1; t <= j && t * k <= i; ++t) {
          tmp = (long long)tmp * (dp[k][D - 1][k - 1] + t - 1) % MOD * inv[t] %
                MOD;
          dp[i][j][k] =
              ((long long)tmp * dp[i - t * k][j - t][k - 1] + dp[i][j][k]) %
              MOD;
        }
      }
  }
  int ans = 0;
  if (n & 1)
    ans = dp[n][D][n / 2];
  else {
    int tmp = dp[n / 2][D - 1][n / 2 - 1];
    ans = (dp[n][D][n / 2 - 1] + (long long)tmp * (tmp + 1) / 2) % MOD;
  }
  if (n == 1) ans = 1;
  if (ans < 0) ans += MOD;
  cout << ans << endl;
}
