XOR 수열

B를 0 이상 N-1 이하에서 골라 A의 모든 원소에 XOR한 뒤, i < j이고 C_i < C_j인 쌍의 최대 개수를 구한다.

어려움8분할 정복비트 연산정렬재귀아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

정수 NN과 길이가 MM인 수열 AA가 주어진다. NN은 2의 거듭제곱이고, AA의 각 원소는 00 이상 N1N-1 이하의 정수이다.

00 이상 N1N-1 이하의 정수 BB를 하나 골라서 새로운 수열 CC를 만들 수 있다. 모든 ii에 대해 Ci=AiBC_i = A_i \oplus B로 정한다. 여기서 \oplus는 비트 단위 배타적 논리합(XOR)이다.

그 다음, CC에서 i<ji < j이면서 Ci<CjC_i < C_j(i,j)(i, j) 쌍의 개수를 센다.

BB를 적절히 골라서 이러한 쌍의 개수의 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN이 주어진다. (2N2302 \le N \le 2^{30}, NN은 2의 거듭제곱)

둘째 줄에 수열 AA의 크기 MM이 주어진다. (2M1310722 \le M \le 131072)

셋째 줄에 A1,A2,,AMA_1, A_2, \dots, A_M이 공백으로 구분되어 주어진다. (0AiN10 \le A_i \le N-1)

출력

첫째 줄에 i<ji < j이면서 Ci<CjC_i < C_j(i,j)(i, j) 쌍의 개수의 최댓값을 출력한다.

힌트

N=4N = 4, A=[3,2,1,0,3,2]A = [3, 2, 1, 0, 3, 2]일 때 B=3B = 3을 고르면 C=[0,1,2,3,0,1]C = [0, 1, 2, 3, 0, 1]이 된다. 이때 i<ji < j이면서 Ci<CjC_i < C_j인 쌍은 8개이다.