说明
我们定义斐波那契数列为
$$\begin{aligned}
F_1&=1\\
F_2&=2\\
F_n&=F_{n-1}+F_{n-2} \text{ for } n \ge 3
\end{aligned}$$
序列的前面若干项为 1,2,3,5,8,13,21,…。
对一个正整数 p,定义 X(p) 为将 p 用若干个不同的斐波那契数的和表示的方案数,两个方案不同当且仅当有一个斐波那契数恰好只在其中一个方案中出现。
给定一个长度为 n 的正整数序列 a1,a2,…,an,对于他的一个非空前缀 a1,a2,…,ak,我们定义 pk=Fa1+Fa2+⋯+Fak。
你的任务是对于所有 k=1,2,…,n,求出 X(pk) 对 109+7 取模的值。
输入格式
标准输入的第一行一个整数 n。
第二行 n 个用空格隔开的整数 a1,a2,…,an。
输出格式
标准输出包含 n 行,在第 k 行输出 X(pk) 对 109+7 取模后的值。
4
4 1 1 5
2
2
1
2
提示
样例解释
pk 的值如下:
$$\begin{aligned}
p_1&=F_4=5\\
p_2&=F_4+F_1=5+1=6\\
p_3&=F_4+F_1+F_1=5+1+1=7\\
p_4&=F_4+F_1+F_1+F_5=5+1+1+8=15
\end{aligned}$$
5 可以用两种方法表示:F2+F3 和单独的 F4(即分别为 2+3 和 5),所以 X(p1)=2。
我们有 X(p2)=2 因为 p2=1+5=2+3。
将 7 表示成若干不同的斐波那契数之和的唯一一种方案是 2+5。
最后,15 可以表示成 2+13 和 2+5+8(两种方案)。
数据规模与约定
对于 100% 的数据,1≤n≤105, 1≤ai≤109。
所有测试数据被划分成以下若干个有附加限制的子任务。每个子任务中包含若干个测试点。
| 子任务 |
附加限制 |
分值 |
| 1 |
n,ai≤15 |
5 |
| 2 |
n,ai≤100 |
20 |
| 3 |
n≤100,ai 是不同的完全平方数 |
15 |
| 4 |
n≤100 |
10 |
| 5 |
ai 是不同的偶数 |
15 |
| 6 |
无附加限制 |
35 |