#diverta2019e. [diverta2019_e]XOR Partitioning

[diverta2019_e]XOR Partitioning

问题描述

对于一个长度为 nn 的序列 aa,其 美丽值 被定义为 a1opluscdotsoplusana_1 \\oplus \\cdots \\oplus a_n,其中 oplus\\oplus 表示按位异或(XOR)。

给定长度为 NN 的序列 AA。Snuke可以在 AA 中插入零个或多个分隔符,将其分割成一些非空的连续子序列。

2N12^{N-1} 种可能的插入分隔符的方式。有多少种方式可以将 AA 分割成所有子序列的美丽值都相等?找到这个计数对 109+710^{9}+7 取模的结果。

约束条件

  • 输入中的所有值均为整数。
  • 1leqNleq5times1051 \\leq N \\leq 5 \\times 10^5
  • 0leqAi<2200 \\leq A_i < 2^{20}

输入

输入从标准输入读取,格式如下:

NN A1A_1 A2A_2 ldots\\ldots ANA_{N}

输出

打印答案。


示例输入 1

3
1 2 3

示例输出 1

3

以下四种分割方式满足条件。只有当 AA 被分割为 (1),(2),(3)(1),(2),(3) 时条件不满足。

  • (1,2,3)(1,2,3)
  • (1),(2,3)(1),(2,3)
  • (1,2),(3)(1,2),(3)

示例输入 2

3
1 2 2

示例输出 2

1

示例输入 3

32
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

示例输出 3

147483634

109+710^{9}+7 取模得到的计数结果。


示例输入 4

24
1 2 5 3 3 6 1 1 8 8 0 3 3 4 6 6 4 0 7 2 5 4 6 2

示例输出 4

292