XOR 그룹

N x M 격자에서 값이 작은 칸부터 차례로 지우고, 각 단계에서 남은 칸들이 이루는 연결 그룹들의 XOR 값 합 중 최댓값을 구한다.

보통6유니온 파인드시뮬레이션비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

N×MN \times M 격자의 모든 칸에 서로 다른 수가 하나씩 들어 있다. 격자에 남아 있는 칸 중에서 위, 아래, 왼쪽, 오른쪽으로 맞닿은 칸끼리 하나의 XOR 그룹을 이루고, 그룹의 값은 그 그룹에 속한 수를 모두 XOR한 값이다. 중간 칸이 비어 있으면 연결이 끊기므로 한 격자에 XOR 그룹이 여러 개 생길 수 있다. 격자의 점수는 모든 XOR 그룹의 값을 더한 수다.

처음에는 모든 칸이 남아 있다. 여기서 남은 수 중 가장 작은 수가 적힌 칸을 하나씩 지워 나간다. 한 칸을 지울 때마다 그룹의 구성이 바뀌고 점수도 달라진다. 한 칸도 지우지 않은 처음 격자와 한 칸씩 지운 뒤의 모든 격자를 통틀어, 점수의 최댓값을 구하여라.

입력

첫째 줄에 NNMM이 주어진다. (1N,M1,0001 \le N, M \le 1{,}000)

다음 NN개 줄에는 격자의 ii번째 줄에 있는 수 MM개가 공백으로 구분되어 주어진다. 각 수는 00 이상 1,000,0001{,}000{,}000 이하의 정수이고, 격자에 있는 수는 모두 다르다.

출력

첫째 줄에 점수의 최댓값을 출력한다.