#include <bits/stdc++.h>
using namespace std;
int mod;
long long inv[20];
void add(int &x, int y) {
  x += y;
  if (x >= mod) x -= mod;
}
long long binom(int n, int m) {
  long long res = 1;
  for (int i = 1; i <= m; i++) res = res * (n - i + 1) % mod * inv[i] % mod;
  return res;
}
int dp[1000 + 5][12][1000 + 5], g[1000 + 5][12];
int main() {
  int n, d;
  scanf("%d%d%d", &n, &d, &mod);
  inv[1] = 1;
  for (int i = 2; i <= 15; i++) inv[i] = inv[mod % i] * (mod - mod / i) % mod;
  if (n <= 2) return puts("1"), 0;
  dp[1][0][0] = 1;
  for (int j = 0; j <= d; j++) g[1][j] = 1;
  for (int i = 2; i <= n; i++)
    for (int j = 1; j <= d; j++) {
      for (int k = 1; k <= i - 1; k++)
        for (int j2 = 0; j2 <= j; j2++) {
          if (j2 * k >= i) break;
          add(dp[i][j][k],
              1ll * dp[i - j2 * k][j - j2][min(k - 1, i - j2 * k - 1)] *
                  g[k][j2] % mod);
        }
      for (int j = 0; j <= d; j++)
        g[i][j] = binom(dp[i][d - 1][i - 1] + j - 1, j);
    }
  int ans = dp[n][d][n / 2];
  if (n % 2 == 0)
    ans = (ans + mod - binom(dp[n / 2][d - 1][n / 2 - 1], 2)) % mod;
  printf("%d\n", ans);
  return 0;
}
