#include #include using ll = long long; constexpr ll MOD = 1000000007; int main() { int N; std::cin >> N; std::vector dislike(N, 0); for (int i = 0, A; i < N; i++) { std::cin >> A, dislike[A]++; } std::vector dp(N + 1, 0); dp[0] = 1; for (int i = 0; i < N; i++) { for (int j = N - 1; j >= 0; j--) { (dp[j + 1] += dp[j] * dislike[i]) %= MOD; } } ll f = 1, ans = 0; for (int i = 0; i <= N; i++) { const ll S = dp[N - i] * f % MOD; (ans += ((N - i) % 2 == 0 ? S : MOD - S)) %= MOD, (f *= (i + 1)) %= MOD; } std::cout << ans << std::endl; return 0; }