#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;LL n,m,p;LL ex_gcd(LL a,LL b,LL &x,LL &y){if (b==0){x=1;y=0;return a;}LL t,ret;ret=ex_gcd(b,a%b,x,y);t=x;x=y;y=t-a/b*y;return ret;}LL inv(LL a,LL p){LL x,y;ex_gcd(a,p,x,y);return (x%p+p)%p;}LL cmp(LL n,LL m,LL p){if (n<m) return 0;LL sum=1;for (int i=1;i<=m;i++)sum=sum*(n-i+1)%p;for (int i=1;i<=m;i++)sum=sum*inv(i,p)%p;return sum;}LL solve(LL n,LL m,LL p){LL ret=1;while(n && m && ret){ret=ret*cmp(n%p, m%p, p)%p;n/=p;m/=p;}return ret;}int main(){while(scanf("%lld%lld%lld",&n,&m,&p)!=EOF){if (n+1-m<m) printf("0n");elseprintf("%lldn",solve(n+1-m,m,p));}return 0;}


