Page not loading? Try clicking here.
Placeholder

#3023

신기한 함수 1s 128MB

Problems

민혁이는 집합 S = {1, 2, …, N}에 대해서 함수 f : S -> S를 만들었다. 민혁이가 만든 함수는 재미있는 성질을 갖고 있다.

 

1) f(f(…f(1)…)) = 1 (단, f는 총 A[1]개)

2) f(f(…f(2)…)) = 2 (단, f는 총 A[2]개)

N) f(f(…f(N)…)) = N (단, f는 총 A[N]개)

 

민혁이는 이런 성질을 만족하는 서로 다른 함수를 총 몇 개나 만들 수 있을지 궁금해졌다. 민혁이를 도와 A[1], A[2], …, A[N]이 주어졌을 때 서로 다른 함수를 총 몇 개 만들 수 있는지 구하는 프로그램을 작성하여라. 두 함수 g, h에 대해서 g(x)≠h(x)를 만족하는 x가 있다면 g, h는 서로 다른 함수이다.


Input

첫 번째 줄에 정의역의 크기 N이 주어진다. (3 ≤ N ≤ 16) 두 번째 줄에는 조건에 해당되는 N개의 양의 정수 A[1], A[2], …, A[N]이 주어진다. (1 ≤ A[i] ≤ 1,000,000)

Output

첫 번째 줄에 조건을 만족하도록 함수를 만드는 방법의 수를 출력한다.

Example #1

4

3 6 9 12
10

Example #2

16

720720 720720 720720 720720 720720 720720 720720 720720
720720 720720 720720 720720 720720 720720 720720 720720
20922789888000


Source

2016 FunctionCup 예비소집 2번

You must sign in to write code.