#include #include #include #include #include #include using namespace std; typedef long long LL; const int mo=1000000007; LL f[110],g[110],ans; int n,i,j,x,a[110],b[110]; int main() { f[0]=0; f[1]=f[2]=1; for (i=3;i<=100;i++) f[i]=(LL)f[i-1]*i%mo; g[0]=0; g[1]=1; for (i=2;i<=100;i++) g[i]=(LL)g[i-1]*i%mo; for (i=1;i<=100;i++) f[i]=(LL)f[i]*(i-1)*i/2%mo; while (scanf("%d",&n)!=EOF) { ans=0; for (i=1;i<=n;i++) a[i]=i-1; for (i=1;i<=n;i++) scanf("%d",&b[i]); for (i=1;i<=n;i++) { a[b[i]]=-a[b[i]]; for (j=1;j<=n;j++) if (j>b[i] && a[j]>0) a[j]--; ans=(LL)(ans-f[n-i]*a[b[i]])%mo; for (j=1;j0) ans=(LL)(ans+a[j]*g[n-i])%mo; for (j=1;j