//https://ncode.syosetu.com/n4830bu/243/ #include "atcoder/all" using namespace atcoder; #include using namespace std; using Mint = modint1000000007; int main() { int N; cin >> N; vector A(N); vector cnt(N); for (int i = 0; i < N; i++) { cin >> A[i]; cnt[A[i]]++; } vector dp(N + 1); dp[0] = 1; for (int i = 0; i < N; i++) { for (int j = N - 1; j >= 0; j--) { dp[j + 1] += dp[j] * cnt[i]; } } vector fac(N + 1); fac[0] = 1; for (int i = 1; i <= N; i++) { fac[i] = fac[i - 1] * i; } Mint ans = 0; for (int i = 0; i <= N; i++) { ans += dp[i] * fac[N - i] * (i % 2 == 0 ? 1 : -1); } cout << ans.val() << endl; }