题目描述
组合数 Cnm 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数。举个例子, 从 (1,2,3) 三个物品中选择两个物品可以有 (1,2),(1,3),(2,3) 这三种选择方法。根据组合数的定义,我们可以给出计算组合数 Cnm 的一般公式:
Cnm=m! (n−m)!n!
其中 n!=1×2×⋯×n。(特别地,当 n=0 时,n!=1;当 m>n 时,Cnm=0。)
小葱在 NOIP 的时候学习了 Cij 和 k 的倍数关系,现在他想更进一步,研究更多关于组合数的性质。小葱发现,Cij 是否是 k 的倍数,取决于 Cijmodk 是否等于 0,这个神奇的性质引发了小葱对 mod 运算(取余数运算)的兴趣。现在小葱选择了是四个整数 n,p,k,r,他希望知道
(i=0∑∞Cnkik+r)modp,即
(Cnkr+Cnkk+r+Cnk2k+r+⋯+Cnk(n−1)k+r+Cnknk+r+⋯)modp的值。
输入格式
第一行有四个整数 n,p,k,r,所有整数含义见问题描述。
输出格式
一行一个整数代表答案。
提示
对于 30% 的测试点,1≤n,k≤30,p 是质数;
对于另外 5% 的测试点,p=2;
对于另外 5% 的测试点,k=1;
对于另外 10% 的测试点,k=2;
对于另外 15% 的测试点,1≤n≤103,1≤k≤50,p 是质数;
对于另外 15% 的测试点,1≤n×k≤106,p 是质数;
对于另外 10% 的测试点,1≤n≤109,1≤k≤50,p 是质数;
对于 100% 的测试点,1≤n≤109,0≤r<k≤50,2≤p≤230−1。