결정, 또 결정
시간 제한2초메모리 제한512 MB
n개 변수 불리언 함수의 진리표가 주어질 때, 그 함수를 나타내는 유일한 최소 이진 결정 다이어그램의 정점 수를 구한다.
문제
을 개의 불 변수라고 하자. 불 변수는 0과 1만 값으로 취한다. 이 변수들 위의 이진 결정 다이어그램(BDD)은 불 함수 을 그림으로 나타낸 것이다.
BDD는 모든 내부 정점이 자식을 정확히 두 개 갖는 뿌리 있는 이진 트리다. 내부 정점 와 두 자식을 잇는 간선에는 0과 1이 하나씩 적혀 있다. 잎 정점에도 0 또는 1이 적혀 있다. BDD가 정점 하나로만 이루어질 수도 있고, 이때 그 정점은 뿌리이면서 잎이다.

입력 이 주어지면 BDD가 나타내는 불 함수를 다음과 같이 계산한다.
- 를 뿌리 정점으로 둔다
- 으로 둔다
- 가 잎이 아닌 동안 다음을 반복한다
- 가 적힌 간선을 따라가서 를 그 자식 정점으로 바꾼다
- 를 1 증가시킨다
- 잎 정점 에 적힌 값을 출력한다
그림의 BDD가 나타내는 함수 를 보자. 을 계산하려면 뿌리에서 시작해 1, 0, 1이 적힌 간선을 차례로 내려간다. 1이 적힌 잎에 도착하므로 이다.
어떤 내부 정점의 부분 트리를 잎 하나로 바꿔서 같은 불 함수를 나타내는 BDD를 만드는 방법이 없으면 그 BDD를 최소 BDD라고 한다. 그림의 BDD는 최소다. 불 함수마다 그것을 나타내는 최소 BDD는 유일하다.
이 문제에서는 변수 불 함수를 그 함수가 취하는 개의 값으로 준다. 이 함수를 나타내는 최소 BDD의 정점 개수를 구하여라.
입력
첫째 줄에 정수 ()이 주어진다. 둘째 줄에 변수 불 함수를 나타내는 개의 값이 주어진다. 각 값은 0 또는 1이다.
이 값들에는 0부터 까지 번호가 붙어 있다. 번째 값이 이고, 는 를 이진법으로 나타냈을 때 의 계수, 즉 의 아래에서 번째 비트다.
세 번째 예제 입력이 그림의 BDD에 해당한다.
출력
입력으로 주어진 불 함수를 나타내는 유일한 최소 BDD의 정점 개수 을 한 줄에 출력한다.