を昇順に並び替えたものを すると, が条件を満たすことは が成り立つことと同値です.
の中で値が であるようなものが の 個であるとします.
においては は連続して 個並んでおり,ある について のようになっています.
よって, は の並び替えになっている必要があり,そのような並び替えは 通り存在します.
以上をすべての について考えることで答えを求めることができます.
すなわち, には 種類の数 が含まれるとし, が含まれる個数を とすると,答えは です.
xxxxxxxxxx
from collections import Counter
N = int(input())
A = list(map(int,input().split()))
MOD = 10**9+7
perm = [1]*(N+1)
for i in range(2,N+1):
perm[i] = i * perm[i-1] % MOD
ans = 1
C = Counter(A)
for v in C.values():
ans *= perm[v]
ans %= MOD
print(ans)