#include #include #define repeat(i,n) for (int i = 0; (i) < (n); ++(i)) #define repeat_reverse(i,n) for (int i = (n)-1; (i) >= 0; --(i)) typedef long long ll; using namespace std; const int mod = 1e9+7; int main() { // input int n; cin >> n; vector a(n); repeat (i,n) cin >> a[i]; // prepare vector fact(n+1); fact[0] = 1; repeat (i,n) fact[i+1] = fact[i] * (i+1) % mod; // compute vector cnt(n); repeat (i,n) { if (a[i] < n) { cnt[a[i]] += 1; } } vector dp(n+1); dp[0] = 1; repeat (i,n) if (cnt[i]) { repeat_reverse (k,n) { dp[k+1] += dp[k] * cnt[i] % mod; dp[k+1] %= mod; } } ll ans = fact[n]; repeat (k,n) { ans += dp[k+1] * fact[n-(k+1)] % mod * ((k+1) % 2 == 1 ? -1 : 1) % mod; ans %= mod; } ans += mod; ans %= mod; // output cout << ans << endl; return 0; }