フィボナッチ数列(★4 Edition)(★★★★)

2 secs 1024 MB
aiblecode's icon aiblecode

本問題はフィボナッチ数列(★3 Edition)の強化版です。

正整数 N,MN, M と長さ NN の数列 A=(A1,A2,,AN)A = (A_1, A_2, \cdots, A_N) が与えられます。
数列 XX を以下のように定義します。

  • 1iN1 \leqq i \leqq N ならば Xi=AiX_i = A_i
  • iN+1i \geqq N + 1 ならば Xi=Xi1+Xi2++XiNX_i = X_{i - 1} + X_{i - 2} + \cdots + X_{i - N}

XMX_M を求めてください。答えが非常に大きくなる場合があるため、素数 109+710^9 + 7 で割った余りを出力してください。

TT 個のテストケースが与えられるので、それぞれについて答えてください。

制約

  • 1T1001 \leqq T \leqq 100
  • 1N101 \leqq N \leqq 10
  • 1M10181 \leqq M \leqq \color{red}{10^{18}}
  • 0Ai109+60 \leqq A_i \leqq 10^9 + 6
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられます。 ここで、casei(i=1,2,,T)\mathrm{case}_i (i = 1, 2, \cdots, T)ii 番目のテストケースです。

TT
case1\mathrm{case}_1
case2\mathrm{case}_2
\vdots
caseT\mathrm{case}_T

各テストケースは以下の形式で与えられます。

case

NNMM
A1A_1A2A_2\ldotsANA_N

出力

標準出力に TT 行出力してください。 ii 行目 (i=1,2,,T)(i = 1, 2, \cdots, T) には ii 番目のテストケースについての答えを出力してください。

各テストケースについて、XMX_M を素数 109+710^9 + 7 で割った余りを出力してください。

サンプル

入力
4
2 7
1 1
1 99999
0
9 10000000007
9 9 8 2 4 4 3 5 3
10 1000000000000000000
1 2 4 8 16 32 64 128 256 512
出力
13
0
104102534
502299872

この入力では、44 個のテストケースが与えられています。1,2,31, 2, 3 番目のテストケースについて、以下のことが言えます。

  • 11 番目のテストケースについて、数列 X=(1,1,2,3,5,8,13,)X = (1, 1, 2, 3, 5, 8, 13, \cdots) です。これの 77 項目は 1313 です。

  • 22 番目のテストケースについて、数列 XX の各要素はすべて 00 です。

  • 33 番目のテストケースについて、109+710^9 + 7 で割った余りを求めることと、計算過程で 3232-bit 整数型の範囲を超える可能性があることに注意してください。

Submit


Go (1.21)