#AG1102003. 和异或

和异或

题目描述

给定一个长度为 nn 的数列,从中选出两段不重叠的连续子序列,使得第一段连续子序列的异或和 ++ 第二段连续子序列的异或和 最大。

换句话说,你需要找到两个区间 [l1,r1][l_1, r_1][l2,r2][l_2, r_2],且同时满足如下条件:

  • 1l1r1<l2r2n1 \le l_1 \le r_1 \lt l_2 \le r_2 \le n
  • (al1al1+1ar1)+(al2al2+1ar2)(a_{l_1} \oplus a_{l_1 + 1} \oplus \ldots \oplus a_{r_1}) + (a_{l_2} \oplus a_{l_2 + 1} \oplus \ldots \oplus a_{r_2}) 最大。

其中,\oplus 是异或运算符。

输入格式

第一行,一个整数 nn,表示数列长度。

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

输出格式

输出一个整数,表示题目所述能够得到的表达式的最大值。

样例

5
1 2 3 1 2
6

说明/提示

样例解释

满足条件的 (l1,r1,l2,r2)(l_1, r_1, l_2, r_2) 有:(1,2,3,3)(1,2,3,3)(1,2,4,5)(1,2,4,5)(3,3,4,5)(3,3,4,5)

数据规模与约定

  • 对于 30%30\% 的数据,n5000n \le 5000
  • 对于 100%100\% 的数据,2n5×105,0ai1092 \le n \le 5 \times 10^5, 0 \le a_i \le 10^9