给定一个长度为 的整数序列 。 你需要计算:这个序列的所有非空子数组的按位或()之和。 按位或的含义是:把两个整数写成二进制后逐位计算,只要某一位至少有一个是 ,结果这一位就是 ;否则结果这一位是 。 更具体地说,子数组 (满足 )对应的按位或为: 本题要求输出所有子数组的上述值加起来的总和。 这里的子数组指从原序列中,连续选取一段元素组成的新序列,例如从 中选取 得到 。本题只考虑非空子数组。
输入描述:
每个测试文件均包含多组测试数据。第一行输入一个整数 代表数据组数,每组测试数据描述如下:第一行输入一个整数 表示序列长度。第二行输入 个整数 表示序列元素。除此之外,保证单个测试文件的 之和不超过 。


输出描述:
对于每一组测试数据,新起一行输出一个整数,表示所有非空子数组的按位或之和对 取模后的结果。
示例1

输入

2
3
1 2 3
4
5 1 2 7

输出

15
51

说明

\hspace{15pt}对于第一组测试数据,所有非空子数组及其按位或为:
\hspace{23pt}\bullet\,子数组 [1,1]:按位或为 1
\hspace{23pt}\bullet\,子数组 [2,2]:按位或为 2
\hspace{23pt}\bullet\,子数组 [3,3]:按位或为 3
\hspace{23pt}\bullet\,子数组 [1,2]:按位或为 1 \operatorname{or} 2 = 3
\hspace{23pt}\bullet\,子数组 [2,3]:按位或为 2 \operatorname{or} 3 = 3
\hspace{23pt}\bullet\,子数组 [1,3]:按位或为 1 \operatorname{or} 2 \operatorname{or} 3 = 3
\hspace{15pt}把它们加起来得到 15
\hspace{15pt}对于第二组测试数据,同理枚举所有非空子数组并计算按位或后求和,结果为 51

备注:
如果您选用 Python 作答本题,请注意:在几乎全部的情况下,PyPy 的运行速度优于 Python,我们建议您选择对应版本的 PyPy 进行提交、而不是 Python。
加载中...