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
#include <cstdio>
#include "message.h"
#include "futbol.h"


int pot(int x, int p, int n) {
  int ret = 1;
	for (; n; n /= 2) {
	  if (n % 2) {
			ret = ((long long)ret) * x % p;
		}
		x = ((long long)x) * x % p;
	}
	return ret;
}

int odw(int x, int p) {
	return pot(x, p, p-2);
}

int main() {
	int n = GetN(), k = GetK(), p = GetP();
	if (MyNodeId() != 0) return 0;
	int tyl = 0;
	if (k > n/2) {
	  k = n-k-1;
		tyl = 1;
	}
	int a = 1, b = 1, c = 1;
	for (int i = 0; i < k; i++) {
		c = ((long long)c) * (n-i) % p;
		b = ((long long)b) * (i+1) % p;
  	a = (((long long)a) * (i+1) + c) % p;
	}
//	printf("%d %d\n", a, b);
	a = ((long long)a) * odw(b, p) % p;
	if (tyl) {
	  a = (pot(2, p, n) + p - a) % p;
	}
	printf("%d\n", a);
	return 0;
}