题目描述
如下定义斐波那契数列:
fib(n)={1fib(n−1)+fib(n−2)n≤2n>2现在我们定义一个函数(注意在 n<1 时这个函数的值是 0):
f(n)=i=1∑nfib2(i)
由于求斐波那契数列的前缀和太简单了,你需要求出:
i=1∑nfib(i)⋅(f(i−2)+fib2(i)+fib(i))的值,答案对输入的 p 取模。
注:fib2(x) 表示 fib(x) 的平方。
输入格式
本题有多组数据。
第一行一个整数 T,表示数据的组数。
对于每组数据,一行两个整数 n,p。
输出格式
对于每组数据,输出一行一个整数,表示答案对 p 取模后的结果。
提示
样例解释:
对于第一组数据,1×(0+12+1)+1×(0+12+1)=4。
对于第二组数据,1×(0+12+1)+1×(0+12+1)+2×(1+22+2)=18。
数据范围
本题采用捆绑测试。
- Subtask 1(5 points):n≤107,p=109+7。
- Subtask 2(20 points):T≤104,n≤108,p=109+7。
- Subtask 3(5 points):p=2。
- Subtask 4(15 points):p≤5。
- Subtask 5(30 points):T≤104,n≤108。
- Subtask 6(25 points):无特殊限制。
对于所有数据,1≤T≤2×105,1≤n≤1018,2≤p≤109+7。