#L2030. 「SDOI2016」储能表

「SDOI2016」储能表

题目描述

有一个 nnmm 列的表格,行从 00n1n - 1 编号,列从 00m1m - 1 编号。
每个格子都储存着能量。最初,第 ii 行第 jj 列的格子储存着 (ixorj)(i \mathbin{\text{xor}} j) 点能量。所以,整个表格储存的总能量是:

[ \sum_{i = 0}^{n - 1} \sum_{j = 0}^{m - 1} (i \mathbin{\text{xor}} j) ]

随着时间的推移,格子中的能量会渐渐减少。一个时间单位,每个格子中的能量都会减少 11。显然,一个格子的能量减少到 00 之后就不会再减少了。
也就是说,kk 个时间单位后,整个表格储存的总能量是:

[ \sum_{i = 0}^{n - 1} \sum_{j = 0}^{m - 1} \max((i \mathbin{\text{xor}} j) - k, 0) ]

给出一个表格,求 kk 个时间单位后它储存的总能量。
由于总能量可能较大,输出时对 pp 取模。


输入格式

第一行一个整数 TT,表示数据组数。
接下来 TT 行,每行四个整数 nnmmkkpp


输出格式

TT 行,每行一个数,表示总能量对 pp 取模后的结果。


样例

输入

3
2 2 0 100
3 3 0 100
3 3 1 100

输出

2
12
6

数据范围与提示

  • 测试点 1 ~ 2T=5000T = 5000n100n \leq 100m100m \leq 100k100k \leq 100p109p \leq 10^9
  • 测试点 3T=5000T = 5000n1018n \leq 10^{18}m1018m \leq 10^{18}k=0k = 0p109p \leq 10^9
  • 测试点 4T=5000T = 5000n1018n \leq 10^{18}m1018m \leq 10^{18}k=1k = 1p109p \leq 10^9
  • 测试点 5T=5000T = 5000n10n \leq 10m1018m \leq 10^{18}k10k \leq 10p109p \leq 10^9
  • 测试点 6T=1T = 1n105n \leq 10^5m1018m \leq 10^{18}k105k \leq 10^5p109p \leq 10^9
  • 测试点 7T=1T = 1n1018n \leq 10^{18}m1018m \leq 10^{18}k1018k \leq 10^{18}p109p \leq 10^9
  • 测试点 8T=100T = 100n1018n \leq 10^{18}m1018m \leq 10^{18}k1018k \leq 10^{18}p109p \leq 10^9
  • 测试点 9 ~ 10T=5000T = 5000n1018n \leq 10^{18}m1018m \leq 10^{18}k1018k \leq 10^{18}p109p \leq 10^9