#2644. 斐波那契字符串

斐波那契字符串

题目描述

斐波那契字符串 SS 是由 0\tt 01\tt 1 所组成的字符串,其生成规则如下:

  • S1=0S_1 = \tt 0
  • S2=1S_2 = \tt 1
  • 对于任意正整数 n(n3)n (n \geq 3)Sn=Sn2+Sn1S_n = S_{n-2} + S_{n-1}(“+”表示字符串拼接)。

例如:S3=01S_3 = 01S4=101S_4 = 101S5=01101S_5 = 01101

在斐波那契字符串 SS 中,定义逆序对为满足以下条件的整数对 (i,j)(i, j):

  • 1i<jS1 \leq i < j \leq |S|(其中 S|S| 表示 SS 的长度)。
  • S[i]=1S[i] = 1(第 ii 个字符为 1\tt 1)并且 S[j]=0S[j] = 0(第 jj 个字符为 0\tt 0)。

现在,给定一个正整数 NN,请你计算出 SNS_N 中所有逆序对 (i,j)(i, j) 的总数。由于结果可能很大,请输出其对 109+710^9 + 7 取余后的值。

输入格式

输入的第一行包含一个整数 TT,表示测试用例的数量。

接下来的 TT 行,每行包含一个整数 NN,表示要计算的斐波那契字符串的序号。

输出格式

对于每个测试用例,输出一行,包含一个整数,表示 SNS_N 中所有逆序对的总数对 109+710^9 + 7 取余后的结果。

8
3
4
5
6
7
8
9
10
0
1
2
7
18
50
132
351

说明/提示

【样例说明】

  • 对于 N=3N = 3S3=01S_3 = 01,逆序对总数为 00
  • 对于 N=4N = 4S4=101S_4 = 101,逆序对总数为 11
  • 对于 N=5N = 5S5=01101S_5 = 01101,逆序对为 (2,4)(2, 4)(3,4)(3, 4),总数为 22

【评测用例规模与约定】

  • 对于 50%50\% 的评测用例,1T101 \leq T \leq 103N1053 \leq N \leq 10^5
  • 对于 100%100\% 的评测用例,1T101 \leq T \leq 103N10183 \leq N \leq 10^{18}