#P5110. 块速递推

块速递推

Description

给定一个数列 aa 满足递推式

an=233an1+666an2,a0=0,a1=1a_{n}=233a_{n-1}+666a_{n-2},a_{0}=0,a_{1}=1

求这个数列第 nn 项模 109+710^9+7 的值,一共有 TT 组询问。

为了在某种程度上减少你的输入和输出量,我们采用以下的代码来生成询问:

namespace Mker
{
	unsigned long long SA,SB,SC;
	void init(){scanf("%llu%llu%llu",&SA,&SB,&SC);}
	unsigned long long rand()
	{
	    SA^=SA<<32,SA^=SA>>13,SA^=SA<<1;
	    unsigned long long t=SA;
		SA=SB,SB=SC,SC^=t^SA;return SC;
	}
}

在调用 Mker::init() 函数之后这个随机数生成器便可以正常工作了,当你第 ii 次调用 Mker::rand() 函数时返回的便是第 ii 次询问的 nn 值。

为了减少你的输出量,你只需要输出所有询问答案的异或和。

Input Format

仅一行四个整数,表示 T,SA,SB,SCT,SA,SB,SC 的值,你可以在读入 TT 之后直接调用 Mker::init() 来完成输入工作。

Output Format

仅一行一个整数,表示所有答案的异或和。

4779 17790102303135 73152356900611 22086182463002
391030355
49999561 116754637679537 79587668206509 80161279644028
705437004

Hint

SA,SB,SCSA,SB,SC 均在 unsigned long long 数据类型的范围之内,由此可以发现返回的 nn 值也是 unsigned long long 数据类型的范围之内。

前 6 个测试点每个测试点 11 分。

对于 1,2 测试点 T5000T \leq 5000

对于 3,4,5,6 测试点 T500000T \leq 500000

对于所有测试点 1T5×1071 \leq T \leq 5×10^7