#include <bits/stdc++.h>
using namespace std;
inline int read() {
  register int data = 0, w = 1;
  char ch = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (ch >= '0' && ch <= '9')
    data = (data << 1) + (data << 3) + (ch ^ 48), ch = getchar();
  return data * w;
}
int n, d, mod, f[1005][11][1005], g[1000005], inv[1000005];
int main() {
  n = read(), d = read(), mod = read();
  if (n == 1 || n == 2) {
    puts("1");
    return 0;
  }
  f[1][0][0] = g[1] = 1;
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= n; i++)
    inv[i] = 1ll * inv[mod % i] * (mod - mod / i) % mod;
  for (int i = 2; i <= n; i++) inv[i] = 1ll * inv[i - 1] * inv[i] % mod;
  for (int i = 2; i <= n; i++) {
    for (int j = 1; j <= d; j++)
      for (int k = 1; k <= i; k++) {
        f[i][j][k] = f[i][j][k - 1];
        for (int t = 1, x = g[k]; t <= j && t * k + 1 <= i;
             ++t, x = 1ll * x * (g[k] + t - 1) % mod) {
          f[i][j][k] = (f[i][j][k] +
                        1ll * f[i - t * k][j - t][min(k - 1, i - t * k - 1)] *
                            x % mod * inv[t] % mod) %
                       mod;
        }
      }
    g[i] = f[i][d - 1][i - 1];
  }
  int ans = f[n][d][n / 2];
  if (n % 2 == 0)
    ans = (ans - 1ll * g[n / 2] * (g[n / 2] - 1) / 2 % mod + mod) % mod;
  cout << ans << '\n';
  return 0;
}
