1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <bits/stdc++.h>
#define FOR(i, n) for(int i = 0; i < (n); ++i)
#define REP(i, a, b) for(int i = (a); i < (b); ++i)
#define TRAV(i, a) for(auto &i : a)
#define SZ(i) ((int)(i).size())
#define X first
#define Y second
#define PR std::pair
#define PII std::pair<int, int>
#define MP std::make_pair
#define ll long long
#define VI std::vector<int>

int n, k, mod, ans;

int main(){
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0);
	std::cin >> n >> k >> mod;
	if(k == 1){
		if(n == 1) std::cout << 0;
		else{
			ans = 1;
			FOR(i, n-1) ans = (2ll*ans)%mod;
			std::cout << ans;
		}
		return 0;
	}
	VI A;
	FOR(i, n) A.push_back(i);
	do{
		int odp = 0;
		VI vec = A;
		while(SZ(vec) > 1){
			VI next;
			FOR(i, SZ(vec)){
				if((i+1 < SZ(vec) && vec[i] < vec[i+1]) || (i-1 >= 0 && vec[i] < vec[i-1])) continue;
				next.push_back(vec[i]);
			}
			vec = next;
			odp++;
		}
		if(odp == k) ans++;
	}while(std::next_permutation(A.begin(), A.end()));
	std::cout << ans%mod;
	return 0;
}