#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+100;
const int mod=1e9+7;
int n;
int m;
ll fac[N],inv[N],inv1[N];
unordered_map<int,int> mp;
ll C(int a,int b){
return fac[a]*inv[b]%mod*inv[a-b]%mod;
}
ll qmi(ll a,int b){
ll res=1;
while(b){
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
void init(){
fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;
inv[0]=1;
for(int i=1;i<=n;i++) inv[i]=inv[i-1]*qmi((ll)i,mod-2)%mod;
inv1[0]=1;
for(int i=1;i<=m;i++) inv1[i]=inv1[i-1]*qmi((ll)2,mod-2)%mod;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
if(mp.count(x)){
m++;
}
else mp[x]=1;
}
init();
ll ans=fac[n]*inv1[m];
for(int i=1;i<=m;i++){
if(i&1) ans=(ans-C(m,i)*fac[n-i]%mod*inv1[m-i]%mod)%mod;
else ans=(ans+C(m,i)*fac[n-i]%mod*inv1[m-i]%mod)%mod;
ans=(ans+mod)%mod;
}
printf("%lld\n",ans);
return 0;
}