#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
long long mod;
long long quick_mod(long long x, long long n) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * x % mod;
    x = x * x % mod;
    n >>= 1;
  }
  return ans;
}
long long dp[maxn][12][maxn], inv[maxn];
int main() {
  int n, d;
  scanf("%d%d%lld", &n, &d, &mod);
  for (int i = 1; i < maxn; i++) inv[i] = quick_mod(i, mod - 2);
  dp[1][0][0] = 1, dp[1][d - 1][0] = 1;
  for (int i = 2; i <= n; i++)
    for (int j = 1; j <= d; j++)
      for (int k = 1; k < i; k++) {
        dp[i][j][k] = dp[i][j][k - 1];
        long long r = dp[k][d - 1][k - 1] - 1, c = 1;
        for (int t = 1; t * k < i && t <= j; t++) {
          c = c * (++r) % mod * inv[t] % mod;
          dp[i][j][k] +=
              dp[i - t * k][j - t][min(k - 1, i - t * k - 1)] * c % mod;
          dp[i][j][k] %= mod;
        }
      }
  long long ans = dp[n][d][(n + 1) / 2 - 1];
  if (n % 2 == 0) {
    long long tmp = dp[n / 2][d - 1][n / 2 - 1];
    ans = ans + (tmp + 1) * tmp % mod * inv[2] % mod;
  }
  ans %= mod;
  if (n <= 2) ans = 1;
  printf("%lld\n", ans);
  return 0;
}
