#include <bits/stdc++.h>
using namespace std;
int d, mod, f;
int bigmod(int v, int p) {
  if (p == 0) return 1;
  if (p == 1) return v;
  if (p & 1) {
    return 1LL * v * bigmod(v, p - 1) % mod;
  }
  int ret = bigmod(v, p / 2);
  return 1LL * ret * ret % mod;
}
int dp[1001], dp2[1001][600][11];
long long inv[13];
int dp_func(int n);
int dp_func2(int n, int kto, int d) {
  if (n == 0) return d == 0;
  if (d == 0 || kto == 0) return 0;
  if (dp2[n][kto][d] != -1) return dp2[n][kto][d];
  long long ret = 0;
  int g = dp_func(kto);
  g--;
  long long tmp = 1;
  for (int i = 1; i <= d; i++) {
    if (n < (i * kto)) break;
    g++;
    tmp = (tmp * g) % mod;
    tmp = (tmp * inv[i]) % mod;
    ret += 1LL * dp_func2(n - i * kto, kto - 1, d - i) * tmp % mod;
  }
  ret += dp_func2(n, kto - 1, d);
  return dp2[n][kto][d] = ret % mod;
}
int dp_func(int n) {
  if (n == 1) return 1;
  if (dp[n] != -1) return dp[n];
  int ret;
  ret = dp_func2(n - 1, n - 1, d - 1);
  return dp[n] = ret;
}
int main() {
  int i, j, k, l, m;
  int n;
  scanf("%d%d%d", &n, &d, &mod);
  if (n == 1 || n == 2) {
    cout << 1 << endl;
    return 0;
  }
  for (int i = 1; i <= 11; i++) {
    inv[i] = bigmod(i, mod - 2);
  }
  memset(dp, -1, sizeof dp);
  memset(dp2, -1, sizeof dp2);
  int ans = dp_func2(n - 1, n / 2, d);
  if (n % 2 == 0) {
    long long dd = dp_func(n / 2);
    dd = dd * (dd - 1);
    dd /= 2;
    dd %= mod;
    ans -= dd;
    if (ans < 0) ans += mod;
  }
  cout << ans << endl;
}
