MOD = 10**9 + 7 def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 A = [] for _ in range(N): a = int(input[ptr]) ptr += 1 A.append(a) cnt = [0] * N for a in A: if a < N: cnt[a] += 1 max_s = N dp = [0] * (max_s + 1) dp[0] = 1 for k in range(N): c = cnt[k] for s in range(max_s, -1, -1): if dp[s]: if s + 1 <= max_s: dp[s + 1] = (dp[s + 1] + dp[s] * c) % MOD fact = [1] * (N + 1) for i in range(1, N + 1): fact[i] = fact[i - 1] * i % MOD total = 0 for s in range(0, N + 1): if s % 2 == 0: sign = 1 else: sign = MOD - 1 # represents -1 mod MOD c_s = dp[s] remaining = N - s if remaining < 0: continue term = (sign * c_s) % MOD term = term * fact[remaining] % MOD total = (total + term) % MOD print(total % MOD) if __name__ == '__main__': main()