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
#include "futbol.h"
#include "message.h"
#include <bits/stdc++.h>
#define f first
#define s second
#define LL long long
#define ALL(V) V.begin(),V.end()
#define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define endl "\n"
#define debug(x) cout<<#x<<": "<<x<<endl
using namespace std;
const LL N=1e7+69, base=1024*1024;
long long n,k,p;
long long odw(long long a) {
    a%=p;
    long long b=p-2;
    long long re=1;
    while(b) {
        if(b%2==1) re*=a;
        a*=a;
        b/=2;
        a%=p;
        re%=p;
    }
    return re;
}
int32_t main(void) {
    boost;
    if(MyNodeId()!=0) return 0;
    n=GetN();
    k=GetK();
    p=GetP();
    long long licznik=1;
    for(int i=1;i<=n;i++) {
        licznik*=i;
        licznik%=p;
    }
    long long mianownik1=licznik;
    long long mianownik2=1;
    long long wynik=0;
    for(int i=n;i>=0;i--) {
        if(i<=k) wynik+=licznik*odw(mianownik1*mianownik2);
        wynik%=p;
        mianownik2*=(n-i+1);
        mianownik1*=odw(i);
        mianownik1%=p;
        mianownik2%=p;
    }
    cout<<wynik<<endl;
}