Find the number of the possible tuples of sequences (A_0,A_1,...,A_N) that satisfy all of the following conditions, modulo M:

* For every i (0\leq i\leq N), A_i is a sequence of length i consisting of integers between 1 and K (inclusive);
* For every i (1\leq i\leq N), A_{i-1} is a subsequence of A_i, that is, there exists 1\leq x_i\leq i such that the removal of the x_i-th element of A_i would result in a sequence equal to A_{i-1};
* For every i (1\leq i\leq N), A_i is lexicographically larger than A_{i-1}.

Constraints

* 1 \leq N,K \leq 300
* 2 \leq M \leq 10^9
* N, K and M are integers.

Input

Input is given from Standard Input in the following format:


N K M


Output

Print the number of the possible tuples of sequences (A_0,A_1,...,A_N), modulo M.

Examples

Input

2 2 100


Output

5


Input

4 3 999999999


Output

358


Input

150 150 998244353


Output

186248260
#include <iostream>
#include <cstring>

using namespace std;

#define REP(i, s, n) for (int i = (int)(s); i < (int)(n); ++i)

typedef long long ll;

ll mod;

void add(ll &x, ll y) {
  x = (x + y) % mod;
}

const int N = 310;

ll dp[N][N], dp2[N][N];

// This solution is implemented after the author read the editorial.
int main(void) {
  int n, k;
  cin >> n >> k >> mod;
  dp[0][0] = 1;
  REP(i, 0, k) {
    memset(dp2, 0, sizeof(dp2));
    REP(j, 0, N) dp2[j][j] = dp[i][j];
    REP(j, 0, N) {
      for (int l = N - 1; l >= 0; --l) {
	if (j < N - 1) {
	  add(dp2[j + 1][l], dp2[j][l] * (l + 1));
	}
	if (l > 0) {
	  add(dp2[j][l - 1], dp2[j][l]);
	}
      }
    }
    REP(j, 0, N) {
      dp[i + 1][j] = dp2[j][0];
    }
  }
  cout << dp[k][n] << endl;
}
