함수의 개수 세기

정의역 {1..N}에서 각 i가 정확히 A_i번 반복한 뒤 자기 자신으로 돌아오는 함수 f의 개수를 센다. N은 16 이하다.

어려움8조합론그래프비트 연산아직 제출이 없습니다시간 제한1초메모리 제한32 MB

문제

민혁이는 집합 S={1,2,,N}S = \{1, 2, \dots, N\}에서 자기 자신으로 가는 함수 f:SSf : S \to S를 하나 만들었다. ffkk번 연속으로 적용하는 것을 fkf^k라고 쓰면, 민혁이가 만든 함수는 다음 성질을 만족한다.

  • fA1(1)=1f^{A_1}(1) = 1
  • fA2(2)=2f^{A_2}(2) = 2
  • \dots
  • fAN(N)=Nf^{A_N}(N) = N

민혁이는 이 성질을 만족하는 서로 다른 함수가 몇 개인지 궁금해졌다. A1,A2,,ANA_1, A_2, \dots, A_N이 주어질 때 그 개수를 구하는 프로그램을 작성하여라. 두 함수 gghh에 대해 g(x)h(x)g(x) \neq h(x)xx가 하나라도 있으면 gghh는 서로 다른 함수이다.

입력

첫째 줄에 정의역의 크기 NN이 주어진다. (3N163 \le N \le 16)

둘째 줄에 양의 정수 A1,A2,,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (1Ai1,000,0001 \le A_i \le 1{,}000{,}000)

출력

첫째 줄에 조건을 만족하는 함수의 개수를 출력한다.