결정, 또 결정

n개 변수 불리언 함수의 진리표가 주어질 때, 그 함수를 나타내는 유일한 최소 이진 결정 다이어그램의 정점 수를 구한다.

보통6동적 계획법분할 정복트리재귀아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

x0,,xn1x_0, \dots, x_{n-1}nn개의 불 변수라고 하자. 불 변수는 0과 1만 값으로 취한다. 이 변수들 위의 이진 결정 다이어그램(BDD)은 불 함수 f(x0,,xn1)f(x_0, \dots, x_{n-1})을 그림으로 나타낸 것이다.

BDD는 모든 내부 정점이 자식을 정확히 두 개 갖는 뿌리 있는 이진 트리다. 내부 정점 vv와 두 자식을 잇는 간선에는 0과 1이 하나씩 적혀 있다. 잎 정점에도 0 또는 1이 적혀 있다. BDD가 정점 하나로만 이루어질 수도 있고, 이때 그 정점은 뿌리이면서 잎이다.

입력 (x0,,xn1)(x_0, \dots, x_{n-1})이 주어지면 BDD가 나타내는 불 함수를 다음과 같이 계산한다.

  • vv를 뿌리 정점으로 둔다
  • i0i \leftarrow 0으로 둔다
  • vv가 잎이 아닌 동안 다음을 반복한다
    • xix_i가 적힌 간선을 따라가서 vv를 그 자식 정점으로 바꾼다
    • ii를 1 증가시킨다
  • 잎 정점 vv에 적힌 값을 출력한다

그림의 BDD가 나타내는 함수 f(x0,x1,x2)f(x_0, x_1, x_2)를 보자. f(1,0,1)f(1, 0, 1)을 계산하려면 뿌리에서 시작해 1, 0, 1이 적힌 간선을 차례로 내려간다. 1이 적힌 잎에 도착하므로 f(1,0,1)=1f(1, 0, 1) = 1이다.

어떤 내부 정점의 부분 트리를 잎 하나로 바꿔서 같은 불 함수를 나타내는 BDD를 만드는 방법이 없으면 그 BDD를 최소 BDD라고 한다. 그림의 BDD는 최소다. 불 함수마다 그것을 나타내는 최소 BDD는 유일하다.

이 문제에서는 nn변수 불 함수를 그 함수가 취하는 2n2^n개의 값으로 준다. 이 함수를 나타내는 최소 BDD의 정점 개수를 구하여라.

입력

첫째 줄에 정수 nn (1n181 \le n \le 18)이 주어진다. 둘째 줄에 nn변수 불 함수를 나타내는 2n2^n개의 값이 주어진다. 각 값은 0 또는 1이다.

이 값들에는 0부터 2n12^n - 1까지 번호가 붙어 있다. ii번째 값이 f(x0,,xn1)f(x_0, \dots, x_{n-1})이고, xjx_jii를 이진법으로 나타냈을 때 2j2^j의 계수, 즉 ii의 아래에서 jj번째 비트다.

세 번째 예제 입력이 그림의 BDD에 해당한다.

출력

입력으로 주어진 불 함수를 나타내는 유일한 최소 BDD의 정점 개수 mm을 한 줄에 출력한다.