#include <bits/stdc++.h>
using namespace std;
const int N = 1111;
const int D = 11;
int n, mod, d;
int f[N][D][N], g[N][D], iv[N];
template <typename T>
inline void chkmin(T &x, T y) {
  x = min(x, y);
}
template <typename T>
inline void chkmax(T &x, T y) {
  x = max(x, y);
}
template <typename T>
inline void read(T &x) {
  T f = 1;
  x = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') f = -f;
  for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0';
  x *= f;
}
inline int power(int a, int n) {
  int res = 1, b = a;
  while (n > 0) {
    if (n & 1) res = 1ll * res * b % mod;
    b = 1ll * b * b % mod;
    n >>= 1;
  }
  return res;
}
inline int inv(int x) { return power(x, mod - 2); }
inline void add(int &x, int y) {
  x += y;
  while (x >= mod) x -= mod;
}
inline void sub(int &x, int y) {
  x -= y;
  if (x < 0) x += mod;
}
int main() {
  read(n);
  read(d);
  read(mod);
  for (int i = 0; i <= n; ++i) f[1][0][i] = 1;
  for (int i = 1; i <= d; ++i) g[1][i] = 1;
  for (int i = 1; i <= d; ++i) iv[i] = inv(i);
  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)
          add(f[i][j][k], 1ll * f[i - l * k][j - l][k - 1] * g[k][l] % mod);
      for (int k = 1; k <= n; ++k) add(f[i][j][k], f[i][j][k - 1]);
    }
    g[i][1] = f[i][d - 1][n];
    for (int j = 2; j <= d; ++j)
      g[i][j] =
          1ll * g[i][j - 1] * (f[i][d - 1][n] + j - 1) % mod * iv[j] % mod;
  }
  int ans = 0;
  if (n <= 2)
    ans = 1;
  else
    ans = f[n][d][n >> 1];
  if (n > 2 && (n % 2 == 0))
    sub(ans, 1ll * (f[n / 2][d - 1][n / 2] - 1) * f[n / 2][d - 1][n / 2] % mod *
                 iv[2] % mod);
  printf("%d\n", ans);
  return 0;
}
