小苯的子序列权值
时间限制: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,他认为一个序列的权值为:序列中所有数字的按位与^\texttt{[1]}
\hspace{15pt}现在小苯想知道所有的非空(显然一共 2^n-1 个)的子序列^\texttt{[2]}中,有多少个子序列的权值是偶数,请你帮他算一算吧。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。

【名词解释】
\hspace{15pt}按位与^\texttt{[1]}(Bitwise AND):对两个整数的二进制表示按位进行与运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节
\hspace{15pt}子序列^\texttt{[2]}:从原序列中删除任意个(可以为零、可以为全部)元素得到的新序列。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行一个正整数 n\left(1 \leqq n \leqq 2 \times 10^5\right),表示序列的长度。
\hspace{15pt}第二行 n 个非负整数 a_1,a_2,\dots,a_n\left(0 \leqq a_i \leqq 10^9\right),表示序列中的元素。
\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数,表示权值为偶数的子序列个数对 998\,244\,353 取模后的值。
示例1

输入

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

输出

复制
24
7