#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,m,n) for(int i=(int)m ; i < (int) n ; ++i ) #define rep(i,n) REP(i,0,n) typedef long long ll; typedef pair pint; typedef pair pli; const int inf=1e9+7; const ll longinf=1LL<<60 ; const ll mod=1e9+7 ; ll dp[6000]; ll cnt[6000]; int main(){ int n;cin>>n; rep(i,n){ int x;cin>>x; ++cnt[x]; } dp[0]=1; rep(i,n)for(int j=n;j>=0;--j){ (dp[j+1]+=dp[j]*cnt[i])%=mod; } ll fact[6000]; fact[0]=1; rep(i,n)fact[i+1]=fact[i]*(i+1)%mod; ll ans=0; rep(j,n+1){ if(j%2==0)ans+=dp[j]*fact[n-j]; else ans+=mod-dp[j]*fact[n-j]%mod; ans%=mod; } cout<