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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include<cstdio>

int wyniki[1010][1010];

int main() {
	int n, k, p;
	
	int wynik;
	
	scanf("%d %d %d", &n, &k, &p);
	
	wyniki[2][1] = 2;
	
	wyniki[3][1] = 4;
	wyniki[3][2] = 2;
	
	wyniki[4][1] = 8;
	wyniki[4][2] = 16;
	
	wyniki[5][1] = 16;
	wyniki[5][2] = 100;
	wyniki[5][3] = 4;

	wyniki[6][1] = 32;
	wyniki[6][2] = 616;
	wyniki[6][3] = 72;

	wyniki[7][1] = 64;
	wyniki[7][2] = 4024;
	wyniki[7][3] = 952;
	
	wyniki[8][1] = 128;
	wyniki[8][2] = 28512;
	wyniki[8][3] = 11680;

	wyniki[9][1] = 256;
	wyniki[9][2] = 219664;
	wyniki[9][3] = 142800;
	wyniki[9][4] = 160;
	
	wyniki[10][1] = 512;
	wyniki[10][2] = 1831712;
	wyniki[10][3] = 1788896;
	wyniki[10][4] = 7680;
	
	wyniki[11][1] = 1024;
	wyniki[11][2] = 16429152;
	wyniki[11][3] = 23252832;
	wyniki[11][4] = 233792;
	
	wyniki[12][1] = 2048;
	wyniki[12][2] = 157552000;
	wyniki[12][3] = 315549312;
	wyniki[12][4] = 5898240;
	
	if (k == 1) {
		wynik = 1;
		
		for (int i = 0; i < n - 1; i++) {
			wynik *= 2;
			wynik %= p;
		}
		
		printf("%d", wynik);
	
	} else {
		printf("%d", wyniki[n][k] % p);
	}
	
	return 0;
}