[SDOI2016]储能表
题号:NC20381
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号。每个格子都储存着能量。
最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量。所以,整个表格储存的总能量是,
   
随着时间的推移,格子中的能量会渐渐减少。一个时间单位,每个格子中的能量都会减少 1。
显然,一个格子的能量减少到 0 之后就不会再减少了。 也就是说,k 个时间单位后,整个表格储存的总能量是,
   
给出一个表格,求 k 个时间单位后它储存的总能量。 由于总能量可能较大,输出时对 p 取模。

输入描述:

第一行一个整数T,表示数据组数。
接下来T行,每行四个整数n、m、k、p。

输出描述:

共T行,每行一个数,表示总能量对p取模后的结果
示例1

输入

复制
3
2 2 0 100
3 3 0 100
3 3 1 100

输出

复制
2
12
6

备注: