#include using namespace std; int n,i,j,x,y,nr[1000004],f[1000004],im[1000004]; long long p,p1,p2; int main() { scanf ("%d", &n); for (i=1;i<=n;i++) { scanf ("%d", &x); nr[x]++; } f[0]=1; for (i=1;i<=n;i++) { p=(1LL)*f[i-1]*i%1000000007; f[i]=p; } for (i=0;i<=n;i++) { x=f[i]; p=1LL; p1=0LL+x; y=1000000005; while (y>0) { if (y%2==1) p=((1LL)*p*p1)%1000000007; p1=(1LL)*p1*p1%1000000007; y/=2; } im[i]=p; } p=1LL; for (i=1;i<=1000000;i++) { if (nr[i]>=1) { p1=0LL; p2=0LL; for (j=0;j<=nr[i];j++) { p1=(1LL)*f[nr[i]]*im[j]%1000000007*im[nr[i]-j]%1000000007; p1=(0LL)+(1LL)*p1*p1%1000000007; p2=((0LL)+p2+p1)%1000000007; } p=(1LL)*p*p2%1000000007; } } p=0LL+p-1; if (p<0) p+=1000000007; printf ("%lld", p); return 0; }