#P2145. Fibonacci

Fibonacci

Problem Description

矩阵快速幂当然是签到题啦!

大家都知道斐波拉契数列的定义如下:

$$f_i = f_{i-1} + f_{i-2} (i \ge 2)\\ f_0 = 0, f_1 = 1$$

在大一时,大家都学过了矩阵,现在凤爪老师决定检验一下大家学习情况。凤爪老师写出了如下式子:

定义矩阵含义为 [fifi−1fi−2]\begin{bmatrix}f_i& f_{i-1} & f_{i-2}\end{bmatrix} 。

因为 fi=fi−1+fi−2f_i = f_{i-1}+f_{i-2} ,所以 fi+1=fi+fi−1f_{i+1} = f_i + f_{i-1} ,即:

$$\begin{bmatrix}f_{i+1} & f_{i} & f_{i-1}\end{bmatrix} \Leftarrow \begin{bmatrix}f_i & f_{i-1}& f_{i-2}\end{bmatrix} \times \begin{bmatrix}1 &1& 0\\ 1 &0& 1\\ 0 &0&0 \end{bmatrix}$$

当然最后一维是没必要的,可以写为:

$$\begin{bmatrix}f_{i+1} & f_{i}\end{bmatrix} \Leftarrow \begin{bmatrix}f_i & f_{i-1}\end{bmatrix} \times \begin{bmatrix}1 &1\\ 1 &0\end{bmatrix}$$

这样就成功的更新了斐波那契数列,加上快速幂就可以达到快速求取的目的。当然,凤爪老师不想自己实现,所以他让你来负责完成。

现在给定 qq 次询问,每次给出一个自然数 nn ,请你求出斐波那契数列的第 nn 项的值,由于这个值可能很大,你需要对给出的 kk 取模。

Input Format

第一行包括一个正整数 TT,表示测试的组数。

对于每组测试数据:

第一行输入两个整数 qq 和 kk,分别表示询问次数和模数。

接下来 qq 行,每行输入一个自然数 nn,表示一次询问。

Output Format

对于每次询问,输出一行一个整数,表示 fnmod  kf_n \mod k 的值。

Sample

样例输入 1

1
3 1000000007
0
1
10

样例输出 1

0
1
55

Hint

  • 1⩽n⩽1018 1 \leqslant n \leqslant 10^{18}
  • 1⩽k⩽109+7 1 \leqslant k \leqslant 10^9 + 7 , 注意 kk 等于 11 的情况。
  • 1⩽Σq⩽4×104 1 \leqslant \Sigma q \leqslant 4 \times 10^4