#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
int f[maxn][11][505], rev[11];
int n, d, mod;
inline int power(int x, int p) {
  int res = 1;
  while (p) {
    if (p & 1) res = 1ll * res * x % mod;
    x = 1ll * x * x % mod;
    p >>= 1;
  }
  return res;
}
inline int C(int n, int m) {
  if (m < 0 || m > n) return 0;
  int res = 1;
  for (int i = (1); i <= (m); i++) res = 1ll * res * rev[i] % mod;
  for (int i = (n - m + 1); i <= (n); i++) res = 1ll * res * i % mod;
  return res;
}
int main() {
  scanf("%d%d%d", &n, &d, &mod);
  if (n == 1) return puts("1"), 0;
  for (int i = (1); i <= (d); i++) rev[i] = power(i, mod - 2);
  for (int i = (0); i <= (n / 2); i++) f[1][d - 1][i] = f[1][0][i] = 1;
  for (int i = (2); i <= (n); i++)
    for (int j = (1); j <= (d); j++)
      for (int k = (1); k <= (n / 2); k++) {
        f[i][j][k] = f[i][j][k - 1];
        for (int t = (1); t <= (j); t++)
          if (i - t * k >= 1)
            f[i][j][k] = (f[i][j][k] + 1ll * f[i - t * k][j - t][k - 1] *
                                           C(f[k][d - 1][k - 1] + t - 1, t)) %
                         mod;
      }
  int ans = f[n][d][n / 2];
  if (!(n & 1)) {
    ans = (ans + mod - C(f[n / 2][d - 1][n / 2 - 1] + 1, 2)) % mod;
    ans = (ans + f[n / 2][d - 1][n / 2 - 1]) % mod;
  }
  printf("%d\n", ans);
  return 0;
}
