// yukicoder: No.243 出席番号(2) // 2019.7.18 bal4u #include typedef long long ll; #if 1 #define gc() getchar_unlocked() #else #define gc() getchar() #endif int in() { // 非負整数の入力 int n = 0, c = gc(); do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0'); return n; } #define MOD 1000000007 #define MAX 5003 int fact[MAX] = {1,1}; int f[MAX]; int N; int dp[MAX]; int main() { int i, j, k; ll ans; N = in(); for (i = 0; i < N; i++) f[in()]++; for (i = 2; i <= N; i++) fact[i] = (ll)fact[i-1]*i % MOD; dp[0] = 1; for (i = 0; i < N; i++) if (f[i]) for (j = i; j >= 0; j--) { dp[j+1] = (dp[j+1] + (ll)f[i]*dp[j]) % MOD; } ans = 0, k = 1; for (i = 0; i <= N; i++) { int t = (ll)dp[i] * fact[N-i] % MOD; if (k) ans += t; else ans -= t; k = 1-k; } ans %= MOD; if (ans < 0) ans += MOD; printf("%d\n", (int)ans); return 0; }