#P1. 划分 (divide)

划分 (divide)

题目描述

给定一个长度为 nn 的整数序列 a1,a2,,ana_1,a_2,\cdots,a_n

你需要把这个序列划分成若干段,定义一段的权值是这一段中所有数的异或和,定义一个划分方案的权值是所有段的权值之积。

求所有划分方案的权值和,对 109+710^9+7 取模。

输入格式

第一行一个正整数 nn

第二行 nn 个整数 a1,a2,,ana_1,a_2,\cdots,a_n

输出格式

输出一行一个整数表示答案,

样例

样例输入

4
7 3 1 2

样例输出

170
  • |7,3,1,2| 权值是 77
  • |7|3,1,2| 权值是 7×0=07 \times 0 = 0
  • |7,3|1,2| 权值是 4×3=124 \times 3 =12
  • |7,3,1|2| 权值是 5×2=105 \times 2 = 10
  • |7,3|1|2| 权值是 4×1×2=84 \times 1 \times 2 = 8
  • |7|3,1|2| 权值是 7×2×2=287 \times 2 \times 2 = 28
  • |7|3|1,2| 权值是 7×3×3=637 \times 3 \times 3 = 63
  • |7|3|1|2| 权值是 7×3×1×2=427 \times 3 \times 1 \times 2 = 42
  • 答案是 7+0+12+10+8+28+63+42=1707+0+12+10+8+28+63+42=170

数据范围与约定

对于所有数据,有:

  • 1n3×1051 \le n \le 3 \times 10^5
  • 0ai10180 \le a_i \le 10^{18}
子任务编号 特殊性质 分值
11 n15n \le 15 2020
22 n1000n \le 1000
33 ai1a_i \le 1 3030
44 无特殊性质