//http://hi.baidu.com/%CC%EC%BF%D5%D6%AE%B3%C7xin/blog/item/a8d28d8824d606649e2fb496.html
#include<cstdio> long long Power(long long a,long long n,long long p){ long long t=1; for(;n;n>>=1,a=a*a%p) if(n&1) t=t*a%p; return t; } /* 对每个i求i关于p的逆元,/i改成*那个逆元,逆元可以欧几里德定理求出, 这里p为素数,有a^(p-1) = 1 (%p) , 所以a的逆就是a^(p-2),所以有: (a/b) mod p = a * b^(p-2) mod p。 */ long long Lucas(long long n,long long m,long long p){ if(n<m) return 0; long long t,res=1,i; for(i=1;i<=m;i++){ res=res*(n-i+1)%p; t=Power(i,p-2,p); res=res*t%p; } return res; } int main(){ long long n,m,p; while(scanf("%lld%lld%lld",&n,&m,&p)!=EOF){ long long res=1; n=n-m+1; if(n<m){ printf("0\n"); continue; } while(n && m && res ){ res=res*Lucas(n%p,m%p,p)%p; n/=p; m/=p; } printf("%lld\n",res); } return 0; }