小苯的左右移动
题号:NC305088
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯拿到了一个整数 k,接着他按顺序对 k 执行了恰好 n 次操作,具体的:
\hspace{15pt}给定一个长度为 n 的序列描述这 n 次操作(编号从 1n),其中第 i 次操作为:

\hspace{23pt}\bullet 如果 i 是奇数,则执行:\rm k=k\ll a_i。(其中 \ll 表示位运算中的左移运算符。)
\hspace{23pt}\bullet 如果 i 是偶数,则执行:\rm k=k\gg a_i。(其中 \gg 表示位运算中的右移运算符。)

\hspace{15pt}n 次操作将按顺序一个个执行,你的任务就是确定最终 k 的值。

输入描述:

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

\hspace{15pt}第一行两个整数 n, k\ (1 \leqq n \leqq 3 \times 10^5, 0 \leqq k \leqq 10^{12}),分别表示操作的个数,以及小苯拿到的初值 k
\hspace{15pt}第二行 n 个整数 a_i\ (1 \leqq a_i \leqq 10^9),表示

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

输出描述:

对于每组测试数据:
\hspace{15pt}在单独的一行输出一个整数,表示最终 k 的值。(由于答案可能很大,因此输出答案对 998244353 取模的值。)
示例1

输入

复制
2
5 13
1 2 3 4 5
5 13
2 3 4 5 1

输出

复制
96
6

说明

对于第一组测试数据,k=13,二进制为:1101

经过 5 次操作,k 的二进制变化为:\overbrace{1101\rightarrow11010}^{\ll1次},\overbrace{11010\rightarrow110}^{\gg2次},\overbrace{110\rightarrow110000}^{\ll3次},\overbrace{110000\rightarrow11}^{\gg4次},\overbrace{11\rightarrow1100000}^{\ll5次}.

最终 k 的二进制为 1100000,其十进制为 96