만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

XOR 짝짓기

시간 제한2초메모리 제한512 MB

요약
값이 적힌 돌 N개(N은 최대 74)를 두 개씩 짝지어 XOR 합을 최소로 만들고, 그 최소 짝짓기의 개수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 동적 계획법, 조합론
정답자
아직 제출이 없습니다

문제

NN개의 돌이 있고, 각 돌에는 음이 아닌 정수 x0,…,xN−1x_0, \ldots, x_{N-1}이 적혀 있다. NN은 짝수이다. 돌들을 N/2N/2개의 쌍으로 나누어 각 돌이 정확히 한 쌍에만 속하게 한다. 각 쌍에 대해 xix_i XOR xjx_j를 계산한다. 두 수를 각각 이진수로 나타내고, 같은 자리의 비트끼리 배타적 논리합을 취한 뒤 그 결과 비트열을 이진수로 해석한다. 모든 쌍의 xix_i XOR xjx_j 값을 더한다. 가능한 모든 짝짓기 중 이 합의 최솟값을 구하고, 그 최솟값을 이루는 짝짓기의 개수를 센다. 한 짝짓기가 다른 짝짓기와 다르다는 것은, 한쪽에 있는 쌍이 다른 쪽에는 없다는 뜻이다. 돌은 인덱스가 다르면 적힌 값이 같아도 서로 다른 돌이다. 쌍의 순서와 쌍 안에서 돌의 순서는 고려하지 않는다. 개수가 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

입력

첫째 줄에 돌의 개수인 짝수 NN이 주어진다. 2≤N≤742 \le N \le 74이다. 둘째 줄에는 돌에 적힌 수 x0,…,xN−1x_0, \ldots, x_{N-1}이 주어진다. 각 수는 0≤xi≤10000 \le x_i \le 1000을 만족한다.

출력

한 줄에 두 수를 공백으로 구분하여 출력한다. 첫 번째 수는 모든 짝짓기에서 xix_i XOR xjx_j 합의 최솟값이다. 두 번째 수는 그 최솟값을 이루는 짝짓기의 개수를 109+710^9 + 7로 나눈 나머지이다.

예제1

  1. 예제 1

    입력
    6
    7 14 17 4 2 1
    
    예상 출력
    31 3