Problem:
Score: 600 points

Problem Statement

We have N non-negative integers: A_1, A_2, ..., A_N.

Consider painting at least one and at most N-1 integers among them in red, and painting the rest in blue.

Let the beauty of the painting be the \mbox{XOR} of the integers painted in red, plus the \mbox{XOR} of the integers painted in blue.

Find the maximum possible beauty of the painting.

What is \mbox{XOR}?

The bitwise \mbox{XOR} x_1 \oplus x_2 \oplus \ldots \oplus x_n of n non-negative integers x_1, x_2, \ldots, x_n is defined as follows:

When x_1 \oplus x_2 \oplus \ldots \oplus x_n is written in base two, the digit in the 2^k's place (k \geq 0) is 1 if the number of integers among x_1, x_2, \ldots, x_n whose binary representations have 1 in the 2^k's place is odd, and 0 if that count is even.

For example, 3 \oplus 5 = 6.

Constraints

All values in input are integers.

2 \leq N \leq 10^5

0 \leq A_i < 2^{60}\ (1 \leq i \leq N)

Input

Input is given from Standard Input in the following format:

N
A_1 A_2 ... A_N

Output

Print the maximum possible beauty of the painting.

Sample Input 1

3
3 6 5

Sample Output 1

12

If we paint 3, 6, 5 in blue, red, blue, respectively, the beauty will be (6) + (3 \oplus 5) = 12.

There is no way to paint the integers resulting in greater beauty than 12, so the answer is 12.

Sample Input 2

4
23 36 66 65

Sample Output 2

188

Sample Input 3

20
1008288677408720767 539403903321871999 1044301017184589821 215886900497862655 504277496111605629 972104334925272829 792625803473366909 972333547668684797 467386965442856573 755861732751878143 1151846447448561405 467257771752201853 683930041385277311 432010719984459389 319104378117934975 611451291444233983 647509226592964607 251832107792119421 827811265410084479 864032478037725181

Sample Output 3

2012721721873704572

A_i and the answer may not fit into a 32-bit integer type.

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

//ポイント：ビットごとに考える、(X(,Y)の選び方に) 依存しないものを探す。
//まずスコア = X + Y = Σ2^i * (Xi + Yi)
//適当にX,Yを選んでXi≠Yi (Xi,Yi={0,1})になったら、他の選び方でもXi≠Yi。このときXi+Yi=1。
//適当にX,Yを選んでXi=Yiになったら、選び方によってはXi+Yi=2Xi (選び方に依存).
//↑をもうちょっと書きやすい形にすると、全体のxor = Wとおくことで、
//Wi=1なら、常にXi+Yi=1
//Wi=0なら、Xi+Yi=2Xi
//つまり、Wi = 1なるiについては常にスコア += 2^i。Wi = 0なるiについてはスコア += 2 * 2^i * Xi。
//ここで、Wj=0なるjについてAiのjビット目を0に置き換えたものをAi'とおく。すると、同じ要素の選び方について、
//Σ2^i * (Xi + Yi) (Wi = 0)は、Aiを使ってもAi'を使っても変化しないので、以降はAi'を用いてみる。
//すると、Wi = 0が常になりたつことになり、スコア = 2Xに変形できる。よって、Xを最大化すればよい。
//今度は、A1'～AN'のうちいくつかを選ぶことで作れるxorの条件（集合）を考える。
//（0個選んでも、全部選んでもxor=0より、そのような場合も考えて良いことに注意する）
//すると、F2上の線形和みたいなので表せる形が条件になることが分かって、線形和（線形従属）といえば掃き出し法なので、
//掃き出し法を実行してみる（(Ai', Aj') -> replace -> (Ai', Ai' xor Aj')してみる）と、作れるxorの集合は変化しない
//ことに気付く。よって、掃き出し法ができ、「自明に貪欲できる形」に変形することができる。

#include <iostream>
#define int long long
#define rep(i, n) for(i = 0; i < n; i++)
#define rrep(i, n) for(i = n - 1; i >= 0; i--)
using namespace std;

int n;
int a[100000];

signed main() {
	int i, j;
	
	cin >> n;
	rep(i, n) cin >> a[i];
	
	int w = 0;
	rep(i, n) w ^= a[i];
	rep(i, n) a[i] &= ~w;
	
	int cor = 0;
	rrep(i, 60) {
		for (j = cor; j < n; j++) {
			 if ((a[j] >> i) & 1) break;
		}
		if (j == n) continue;
		swap(a[cor], a[j]);
		for (j = cor + 1; j < n; j++) {
			if ((a[j] >> i) & 1) a[j] ^= a[cor];
		}
		cor++;
	}
	
	int x = 0;
	rep(i, n) {
		if ((x ^ a[i]) > x) x ^= a[i];
	}
	
	cout << 2 * x + w << endl;
	return 0;
}