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;)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);}