如你所闻,Gunnar 是一位年迈且健忘的研究员。他的大部分研究都与安全相关,并且他对自己账户的安全性非常在意,因此他为每个网站都设置了不同的密码。要记住所有密码对他来说太困难了,所以对于每个网站,他只记住生成密码的方法。
Photo by Mark Ramsay
对于其中一个非常重要的网站,他从一个包含一长串非负整数的文件开始。由于他非常喜欢 $\oplus$(异或)运算,他的密码是列表中某些整数的异或和。注意,异或运算在布尔值上的定义为 $0 \oplus 0 = 1 \oplus 1 = 0$ 以及 $0 \oplus 1 = 1 \oplus 0 = 1$。我们可以将此定义扩展到整数,即我们首先将两个整数写成二进制形式,然后对数字中每一位对应的位进行异或运算。例如,$12 = (1100)_2$ 和 $5 = (101)_2$ 的异或结果是 $9 = (1001)_2$。我们可以使用异或运算代替加法来对数字求和,我们将这种修改后的和称为异或和(xor-sum)。
Gunnar 的文件中包含一个数字列表,他从中选择了一个子集,使得该子集的异或和尽可能大。所得的数字就是他的密码。不幸的是,他忘记了寻找具有最大异或和的子集的算法,因此他请求你帮助他恢复密码。当然,他不会告诉你这个密码对应的是哪个网站。
第一行包含一个整数 $n$ ($1 \le n \le 100\,000$):Gunnar 文件中数字列表的长度。 第二行包含 $n$ 个空格分隔的整数 $a_1, \dots, a_n$ ($1 \le a_i \le 10^{18}$),即文件中的数字。
输出一行,表示 Gunnar 通过选择列表的某个子集并计算该子集的异或和所能得到的最大数值。
样例
输入格式 1
3 1 3 5
输出格式 1
7
输入格式 2
4 2 6 4 8
输出格式 2
14