时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定由 n 个整数组成的序列 \{a_1,a_2,\dots,a_n\},定义:

f(x,y,z)=\begin{cases} x & z=1\\ y & z=2\\ f(x,y,z-1)+f(x,y,z-2) &z\ge 3 \end{cases}

\hspace{15pt}求解 \displaystyle\sum_{i=1}^n\sum_{j=i}^nf(a_i,a_j,j-i+1)998\,244\,353 取模后的结果。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^5\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n\left(1\leq n\leq 10^6\right) 代表序列中的整数数量。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n\left(1\leq a_i\leq 10^9\right) 代表序列中的元素。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 10^6

输出描述:

\hspace{15pt}对于每组测试数据,新起一行。输出一个整数,代表答案对 998\,244\,353 取模后的结果。
示例1

输入

复制
2
3
2 1 3
5
4 5 8 9 6

输出

复制
15
165

说明

\hspace{15pt}对于第一组测试数据:
\hspace{23pt}\bullet\,f(a_1,a_1,1)=a_1=2
\hspace{23pt}\bullet\,f(a_1,a_2,2)=a_2=1
\hspace{23pt}\bullet\,f(a_1,a_3,3)=f(a_1,a_3,2)+f(a_1,a_3,1)=a_3+a_1=3+2=5
\hspace{23pt}\bullet\,f(a_2,a_2,1)=a_2=1
\hspace{23pt}\bullet\,f(a_2,a_3,2)=a_3=3
\hspace{23pt}\bullet\,f(a_3,a_3,1)=a_3=3
\hspace{15pt}因此,答案为 2+1+5+1+3+3=15