#include <bits/stdc++.h>
using namespace std;
long long n, d, ans = 0, mod, f[1010][20][1010], c[1010][20], inv[20];
long long qpow(long long a, long long b) {
  long long ans = 1, k = a;
  while (b) {
    if (b & 1) ans = ans * k % mod;
    k = k * k % mod;
    b >>= 1;
  }
  return ans;
}
int main() {
  scanf("%lld%lld%lld", &n, &d, &mod);
  inv[0] = 1;
  for (int i = 1; i <= n; i++) inv[i] = qpow(i, mod - 2);
  for (int i = 0; i <= n; i++) f[1][0][i] = 1;
  for (int i = 1; i <= d; i++) c[1][i] = 1;
  for (int i = 2; i <= n; i++) {
    for (int j = 1; j <= d; j++) {
      for (int k = 1; k < i; k++)
        for (int l = 1; l <= j && l * k <= i; l++)
          f[i][j][k] =
              (f[i][j][k] + f[i - l * k][j - l][k - 1] * c[k][l]) % mod;
      for (int k = 1; k <= n; k++)
        f[i][j][k] = (f[i][j][k] + f[i][j][k - 1]) % mod;
    }
    c[i][1] = f[i][d - 1][n];
    for (int j = 2; j <= d; j++)
      c[i][j] = c[i][j - 1] * (f[i][d - 1][n] + j - 1) % mod * inv[j] % mod;
  }
  if (n <= 2)
    ans = 1;
  else
    ans = f[n][d][n / 2];
  if (n > 2 && !(n & 1))
    ans = (ans -
           (f[n / 2][d - 1][n / 2] - 1) * f[n / 2][d - 1][n / 2] % mod *
               inv[2] % mod +
           mod) %
          mod;
  printf("%lld\n", ans);
}
