#include using namespace std; long long int call(long long int x,long long int y, long long int p) { long long int res = 1; x = x % p; while (y > 0) { if (y & 1) res = (res*x) % p; y = y>>1; x = (x*x) % p; } return res; } int main() { long long int a[2000]={0},i,mod=1000000007; a[0]=1; a[1]=1; for(i=2;i<2000;i++) { a[i]=((a[i-1]%mod)*(i%mod))%mod; } long long int n; scanf("%lld",&n); long long int b[n+1],j,k; for(i=1;i<=n;i++) { scanf("%lld",&b[i]); } long long int ans[n+1][n+1],sum=1,range,prev,next,tot; for(i=0;i<=n;i++) { for(j=0;j<=n;j++) { ans[i][j]=0; } } ans[1][1]=1; for(i=2;i<=n;i++) { if(b[i]>b[i-1]) { range=i; prev=i; next=i; if(i==n) sum=(sum+1)%mod; ans[i][i]=1; for(j=i+1;j<=n;j++) { if(j>next) { next=j+range-1; if(j%range==0) tot=0; else tot=range-j%range; ans[i][j]=(((a[range]*call(a[tot],mod-2,mod))%mod)*ans[i][prev])%mod; sum=(sum%mod+ans[i][j])%mod; } else if(b[j]>b[j-1]) { if(j%range==0) tot=0; else tot=range-j%range; ans[i][j]=(((a[range]*call(a[tot],mod-2,mod))%mod)*ans[i][prev])%mod; if(j