속이기

시간 제한1초메모리 제한256 MB

요약
수열을 XOR이 같은 두 비어 있지 않은 그룹으로 나누고 첫 번째 그룹의 합을 최대로 만듭니다.
난이도

보통10점 중 5점

유형
비트 연산, 그리디
정답자
아직 제출이 없습니다

문제

승현이는 남을 속이기를 좋아한다. 오늘은 수열로 우리를 속여 보려고 한다.

승현이가 길이 nn인 자연수 수열 a1,a2,…,ana_1, a_2, \dots, a_n을 들고 왔다. 그러더니 이 수열의 각 원소를 그룹 X와 그룹 Y 중 한쪽에 넣으라고 한다. X에 들어간 원소를 X1,X2,…,XkX_1, X_2, \dots, X_k, Y에 들어간 원소를 Y1,Y2,…,Yn−kY_1, Y_2, \dots, Y_{n-k}라고 하자. 두 그룹 중 어느 쪽도 비어 있으면 안 된다. 즉 k>0k > 0이고 n−k>0n - k > 0이다.

X1⊕X2⊕⋯⊕XkX_1 \oplus X_2 \oplus \dots \oplus X_k와 Y1⊕Y2⊕⋯⊕Yn−kY_1 \oplus Y_2 \oplus \dots \oplus Y_{n-k}가 같으면 승현이가 X1+X2+⋯+XkX_1 + X_2 + \dots + X_k원을 준다.

승현이에게 하도 속아서 믿기지는 않지만, 돈을 잃을 일은 없으니 한 번 해 보기로 했다. 승현이가 제시한 수열 aa가 주어질 때 돈을 받을 수 있는지, 받을 수 있다면 최대 얼마를 받을 수 있는지 구하는 프로그램을 작성하라.

⊕\oplus는 비트 단위 배타적 논리합(XOR)이다. 두 수를 이진법으로 쓴 다음 자리마다 두 비트가 다르면 1, 같으면 0을 놓아서 얻는 값이다.

입력

첫째 줄에 nn (1≤n≤10001 \le n \le 1000)이 주어진다. 둘째 줄에 a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤1061 \le a_i \le 10^6)이 공백으로 구분되어 주어진다.

출력

첫째 줄에 받을 수 있는 돈의 최댓값을 출력한다. 돈을 받을 수 없으면 0을 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 2 3
    
    예상 출력
    5
    
  2. 예제 2

    입력
    4
    1 2 3 4
    
    예상 출력
    0