XOR 짝짓기
시간 제한2초메모리 제한512 MB
값이 적힌 돌 N개(N은 최대 74)를 두 개씩 짝지어 XOR 합을 최소로 만들고, 그 최소 짝짓기의 개수를 10^9+7로 나눈 나머지로 구합니다.
문제
개의 돌이 있고, 각 돌에는 음이 아닌 정수 이 적혀 있다. 은 짝수이다. 돌들을 개의 쌍으로 나누어 각 돌이 정확히 한 쌍에만 속하게 한다. 각 쌍에 대해 XOR 를 계산한다. 두 수를 각각 이진수로 나타내고, 같은 자리의 비트끼리 배타적 논리합을 취한 뒤 그 결과 비트열을 이진수로 해석한다. 모든 쌍의 XOR 값을 더한다. 가능한 모든 짝짓기 중 이 합의 최솟값을 구하고, 그 최솟값을 이루는 짝짓기의 개수를 센다. 한 짝짓기가 다른 짝짓기와 다르다는 것은, 한쪽에 있는 쌍이 다른 쪽에는 없다는 뜻이다. 돌은 인덱스가 다르면 적힌 값이 같아도 서로 다른 돌이다. 쌍의 순서와 쌍 안에서 돌의 순서는 고려하지 않는다. 개수가 매우 클 수 있으므로 로 나눈 나머지를 출력한다.
입력
첫째 줄에 돌의 개수인 짝수 이 주어진다. 이다. 둘째 줄에는 돌에 적힌 수 이 주어진다. 각 수는 을 만족한다.
출력
한 줄에 두 수를 공백으로 구분하여 출력한다. 첫 번째 수는 모든 짝짓기에서 XOR 합의 최솟값이다. 두 번째 수는 그 최솟값을 이루는 짝짓기의 개수를 로 나눈 나머지이다.