#include #include using namespace std; using namespace atcoder; using mint = modint1000000007; void solve(){ int n; cin >> n; map cnt; int a; for(int i = 0; i < n; i++){ cin >> a; if(a < n) cnt[a]++; } vector dp(n + 1, 0); dp[0] = 1; for(auto tmp:cnt){ int v = tmp.second; for(int i = n; i > 0; i--) dp[i] += dp[i - 1] * v; } vector fact(n + 1); fact[0] = 1; for(int i = 1; i <= n; i++) fact[i] = fact[i - 1] * i; mint ans = 0; mint pm = 1; for(int i = 0; i <= n; i++){ ans += pm * dp[i] * fact[n - i]; pm *= -1; } cout << ans.val() << "\n"; } int main(){ cin.tie(0)->sync_with_stdio(0); int t; t = 1; // cin >> t; while(t--) solve(); }