아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

함수의 개수 세기

시간 제한1초메모리 제한32 MB

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

어려움10점 중 8점

유형
조합론, 그래프, 비트 연산
정답자
아직 제출이 없습니다

문제

민혁이는 집합 S={1,2,…,N}S = \{1, 2, \dots, N\}에서 자기 자신으로 가는 함수 f:S→Sf : S \to S를 하나 만들었다. ff를 kk번 연속으로 적용하는 것을 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이 주어질 때 그 개수를 구하는 프로그램을 작성하여라. 두 함수 gg와 hh에 대해 g(x)≠h(x)g(x) \neq h(x)인 xx가 하나라도 있으면 gg와 hh는 서로 다른 함수이다.

입력

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

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

출력

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

예제2

  1. 예제 1

    입력
    4
    3 6 9 12
    
    예상 출력
    10
    
  2. 예제 2

    입력
    16
    720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720 720720
    
    예상 출력
    20922789888000