#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
#define fi first
#define se second
#define pp push_back
#define all(x) (x).begin(), (x).end()
#define Ones(n) __builtin_popcount(n)
#define endl '\n'
#define mem(arrr, xx) memset(arrr,xx,sizeof arrr)
//#define int long long
#define debug(x) cout << (#x) << " = " << x << endl
void Gamal() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#ifdef Clion
freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
#endif
}
int dx[] = {+0, +0, -1, +1, +1, +1, -1, -1};
int dy[] = {-1, +1, +0, +0, +1, -1, +1, -1};
const double EPS = 1e-9;
const ll OO = 0X3F3F3F3F3F3F3F3F;
const int N = 2030 + 5, INF = INT_MAX, MOD = 1e9 + 7, LOG = 20;
int dp[N][N], n, m, r;
int slv(int i, int leaf, int intern) {
if (i == -1) {
return 1;
}
int &ret = dp[i][leaf];
if (~ret)
return ret;
ret = 0;
// with left
if (leaf) {
ret += 1ll * leaf * slv(i - 1, leaf - (r == i), intern + 1) % m;
ret %= m;
}
// with internal
if (intern) {
ret += 1ll * intern * slv(i - 1, leaf + 1 - (r == i), intern - 1) % m;
ret %= m;
}
return ret;
}
void solve() {
cin >> r >> n >> m;
r--;
mem(dp, -1);
cout << slv(n - 1, 0, 1) << endl;
}
signed main() {
Gamal();
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcHAgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBPbmVzKG4pIF9fYnVpbHRpbl9wb3Bjb3VudChuKQojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIG1lbShhcnJyLCB4eCkgbWVtc2V0KGFycnIseHgsc2l6ZW9mIGFycnIpCi8vI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZGVidWcoeCkgY291dCA8PCAoI3gpIDw8ICIgPSAiIDw8IHggPDwgZW5kbAoKdm9pZCBHYW1hbCgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwojaWZkZWYgQ2xpb24KICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pLCBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKfQoKaW50IGR4W10gPSB7KzAsICswLCAtMSwgKzEsICsxLCArMSwgLTEsIC0xfTsKaW50IGR5W10gPSB7LTEsICsxLCArMCwgKzAsICsxLCAtMSwgKzEsIC0xfTsKCmNvbnN0IGRvdWJsZSBFUFMgPSAxZS05Owpjb25zdCBsbCBPTyA9IDBYM0YzRjNGM0YzRjNGM0YzRjsKY29uc3QgaW50IE4gPSAyMDMwICsgNSwgSU5GID0gSU5UX01BWCwgTU9EID0gMWU5ICsgNywgTE9HID0gMjA7CgppbnQgZHBbTl1bTl0sIG4sIG0sIHI7CgppbnQgc2x2KGludCBpLCBpbnQgbGVhZiwgaW50IGludGVybikgewogICAgaWYgKGkgPT0gLTEpIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGludCAmcmV0ID0gZHBbaV1bbGVhZl07CiAgICBpZiAofnJldCkKICAgICAgICByZXR1cm4gcmV0OwogICAgcmV0ID0gMDsKICAgIC8vIHdpdGggbGVmdAogICAgaWYgKGxlYWYpIHsKICAgICAgICByZXQgKz0gMWxsICogbGVhZiAqIHNsdihpIC0gMSwgbGVhZiAtIChyID09IGkpLCBpbnRlcm4gKyAxKSAlIG07CiAgICAgICAgcmV0ICU9IG07CiAgICB9CiAgICAvLyB3aXRoIGludGVybmFsCiAgICBpZiAoaW50ZXJuKSB7CiAgICAgICAgcmV0ICs9IDFsbCAqIGludGVybiAqIHNsdihpIC0gMSwgbGVhZiArIDEgLSAociA9PSBpKSwgaW50ZXJuIC0gMSkgJSBtOwogICAgICAgIHJldCAlPSBtOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiByID4+IG4gPj4gbTsKICAgIHItLTsKICAgIG1lbShkcCwgLTEpOwogICAgY291dCA8PCBzbHYobiAtIDEsIDAsIDEpIDw8IGVuZGw7Cn0KCgpzaWduZWQgbWFpbigpIHsKICAgIEdhbWFsKCk7CiAgICBpbnQgdCA9IDE7Ci8vICAgIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=