#include <bits/stdc++.h>
using namespace std;
int n, d;
long long tree[205][205][205];
long long c[205][205], mod;
int main() {
  scanf("%d%d%lld", &n, &d, &mod);
  for (int i = 0; i <= n; ++i) c[i][0] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= i; ++j) {
      c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
      c[i][j] %= mod;
    }
  }
  tree[1][1][0] = 1;
  for (int i = 1; i < n; ++i) {
    for (int j = 1; j <= n; ++j) {
      for (int k = 0; k <= d; ++k) {
        tree[i + 1][j][k] = tree[i][j][k];
      }
    }
    long long tree_i = 0;
    for (int j = 0; j < d; ++j) {
      tree_i += tree[i][i][j];
      tree_i %= mod;
    }
    long long ways = 1;
    for (int j = 1; j <= d && i * j <= n; ++j) {
      ways = (ways * c[i * j - 1][i - 1]) % mod;
      for (int k = 1; k + i * j <= n; ++k) {
        long long cc = ways * c[i * j + k - 1][k - 1] % mod;
        for (int h = 0; h + j <= d; ++h) {
          tree[i + 1][i * j + k][h + j] +=
              tree[i][k][h] * tree_i % mod * cc % mod;
          tree[i + 1][i * j + k][h + j] %= mod;
        }
      }
      ways = ways * tree_i % mod;
    }
  }
  long long tot_tr = 0;
  for (int i = 0; i <= n - 1; ++i) {
    for (int j = 0; j <= d; ++j) {
      for (int k = 0; k + j <= d; ++k) {
        if (k == 1) {
          continue;
        }
        tot_tr += tree[n][i + 1][j] * tree[n][n - i][k] % mod;
        tot_tr %= mod;
      }
    }
  }
  long long ans = 1LL * 2 * n * (n - 1) % mod * tot_tr % mod;
  printf("%lld\n", ans);
  return 0;
}
