#include <bits/stdc++.h>
using namespace std;
const long long N = 1005;
long long n, d, mod;
long long f[N][11][N / 2];
long long inv[11];
long long ksm(long long a, long long x) {
  long long ans = 1;
  while (x) {
    if (x % 2 == 1) ans = ans * a % mod;
    a = a * a % mod;
    x /= 2;
  }
  return ans % mod;
}
void pre() {
  long long tmp = 1;
  for (long long i = 1; i <= d; i++) {
    tmp = tmp * i;
    inv[i] = ksm(tmp, mod - 2);
  }
}
long long C(long long m, long long n) {
  long long ans = 1;
  for (long long i = m; i >= m - n + 1; i--) ans = (ans * i) % mod;
  ans = (ans * inv[n]) % mod;
  return ans;
}
int main() {
  cin >> n >> d >> mod;
  if (n <= 2) {
    cout << 1;
    return 0;
  }
  pre();
  for (long long i = 0; i <= n / 2; i++) f[1][0][i] = 1;
  for (long long i = 2; i <= n; i++) {
    for (long long j = 1; j <= min(i - 1, d); j++) {
      for (long long k = 1; k <= n / 2; k++) {
        f[i][j][k] = f[i][j][k - 1];
        for (long long t = 1; t <= min((i - 1) / k, j); t++) {
          long long tmp = (k == 1) ? 0 : d - 1;
          f[i][j][k] = (f[i][j][k] + f[i - t * k][j - t][k - 1] *
                                         C(f[k][tmp][k - 1] + t - 1, t) % mod) %
                       mod;
        }
      }
    }
  }
  long long ans = f[n][d][n / 2];
  if (n % 2 == 0) ans = (ans + mod - C(f[n / 2][d - 1][n / 2], 2)) % mod;
  cout << ans;
}
