P=1e9+7;a[6000],A,i,k;long dp[6000],f;main(n){for(f=dp[0]=1;~scanf("%d",&i);)--n&&a[i]++;for(;k+n;k++)for(i=k;i;i--)dp[i]=(dp[i]+dp[i-1]*a[k])%P;for(;~-n;n++,f=(f*++i)%P)A=(A+(n%2*2+1)*f*dp[-n])%P;printf("%d",(A+P)%P);}