2775.GukiZ and Binary Operations

Time Limit: 1s Memory Limit: 256MB

We all know that GukiZ often plays with arrays. Now he is thinking about this problem: how many arrays a, of length n, with non-negative elements strictly less then 2l meet the following condition: 2775_1.png? Here operation 2775_2.png means bitwise AND (in Pascal it is equivalent to and, in C/C++/Java/Python it is equivalent to &), operation 2775_3.png means bitwise OR (in Pascal it is equivalent to 2775_3.png, in C/C++/Java/Python it is equivalent to |). Because the answer can be quite large, calculate it modulo m. This time GukiZ hasn't come up with solution, and needs you to help him!

Input Format(From the terminal/stdin)

Input First and the only line of input contains four integers n, k, l, m (2 \le n \le 1018, 0 \le k \le 1018, 0 \le l \le 64, 1 \le m \le 109+7).

Output Format(To the terminal/stdout)

Output In the single line print the number of arrays satisfying the condition above modulo m.

Sample Input 1

Copy
2 1 2 10
 · · ·  \n

Sample Output 1

Copy
3
 \n

Sample Input 2

Copy
2 1 1 3
 · · · \n

Sample Output 2

Copy
1
 \n

Sample Input 3

Copy
3 3 2 10
 · · ·  \n

Sample Output 3

Copy
9
 \n

Hints

In the first sample, satisfying arrays are {1,1},{3,1},{1,3}.In the second sample, only satisfying array is {1,1}.In the third sample, satisfying arrays are {0,3,3},{1,3,2},{1,3,3},{2,3,1},{2,3,3},{3,3,0},{3,3,1},{3,3,2},{3,3,3}.

Submit

请先 登录

© 2025 FAQs