两难抉择新编
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

现在有长度为 n 的数组 a,你可以在两种操作中选择一种进行最多一次操作。

  • 操作1:
  选择一个数 i (1\leq i\leq n) 使得 a_i:=a_i+xx 可以是 [1,\lfloor n/i \rfloor] 范围内任意正整数( \lfloor\rfloor 表示向下取整 )。
  • 操作2:
  选择一个数 i (1\leq i\leq n) 使得 a_i:=a_i * xx 可以是 [1,\lfloor n/i \rfloor] 范围内任意正整数。

请问进行操作后,最大的数组异或和是多少?

数组异或和:数组 aa_1\oplus a_2 \oplus a_3 ... \oplus a_n的值,\oplus 表示异或。

输入描述:

输入包含两行.
第一行一个正整数 n (1\leq n\leq 2*10^5) 表示数组 a 的长度。
第二行 n 个正整数 a_i (1\leq a_i \leq10^9) 表示数组 a 的元素。

输出描述:

输出包含一行一个整数,表示最大的数组异或和。
示例1

输入

复制
5
5 3 4 1 2

输出

复制
29

说明

对第1个数5进行操作2,使5变成25,使得数组异或和最大