#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int maxd = 11;
long long n, d, mod, dp[maxn][maxd], pd[maxn][maxd], f, t[maxd];
inline long long ksm(long long x, long long n) {
  long long ret = 1;
  while (n) {
    if (n & 1) ret = ret * x % mod;
    n >>= 1;
    x = x * x % mod;
  }
  return ret;
}
inline long long solve() {
  dp[1][0] = 1;
  for (int i = 1; i <= n / 2; ++i)
    if ((i - 1) % (d - 1) == 0) {
      f = (i == 1) ? 1 : dp[i][d - 1];
      for (int j = 1; j <= n; ++j) memset(pd[j], 0, sizeof dp[j]);
      t[0] = 1;
      for (int j = 1; j <= d; ++j)
        t[j] = t[j - 1] * (f + j - 1) % mod * ksm(j, mod - 2) % mod;
      for (int j = 0; j <= d; ++j)
        for (int k = 0; k <= d; ++k)
          if (j + k <= d)
            for (int l = 1; l <= n; ++l)
              if (l + i * k <= n)
                pd[l + i * k][j + k] =
                    (pd[l + i * k][j + k] + dp[l][j] * t[k]) % mod;
      for (int j = 0; j <= n; ++j) memcpy(dp[j], pd[j], sizeof dp[j]);
    }
  long long ret = dp[n][d];
  if (n % 2 == 0)
    ret = ((ret - dp[n / 2][d - 1] * (dp[n / 2][d - 1] - 1) / 2) % mod + mod) %
          mod;
  return ret;
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &d, &mod);
  printf("%I64d\n", n <= 2 ? 1 : solve());
  return 0;
}
