小红的异或分组
题号:NC303069
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小红拿到了一个长为 n 的数组,现在她想要把这个数组分成三个连续的非空子数组,使得这三个子数组的异或和相等。
\hspace{15pt}小红想知道有多少种合法的方案,请你帮帮她。

\hspace{15pt}在这里,一个数组的异或和定义为:将数组中的所有元素进行异或运算,得到的结果。若数组中只有一个元素,则其异或和为该元素本身。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(3\leqq n \leqq 2\times10^5\right),表示数组的长度。
\hspace{15pt}第二行输入 n 个整数 a_i\left(0 \leqq a_i \leqq 10^9 \right),表示数组中的元素。

输出描述:

输出一个整数,代表合法的方案数。
示例1

输入

复制
6
1 3 3 3 2 1

输出

复制
2

说明

\hspace{15pt}在这个样例中,有两种合法的方案:
\hspace{23pt}\bullet\,\{1\}\{3,3,3,2\}\{1\}
\hspace{23pt}\bullet\,\{1,3,3\}\{3,2\}\{1\}
示例2

输入

复制
3
1 3 2

输出

复制
0