#include using namespace std; const int N=1300; int a[N]; bool inc[N][N]; #define ll long long #define mod 1000000007 int add(int a,int b) { int ret=a+b; if(ret>=mod) ret-=mod; return ret; } int mul(int a,int b) { ll ret=1LL*a*b; if(ret>=mod) ret%=mod; return ret; } int dp[N][N]; int fact[N]; int ifact[N]; int fp(int b,int e) { if(e==0) return 1; if(e==1) return b; int ret=fp(b,e/2); ret=mul(ret,ret); if(e%2) ret=mul(ret,b); return ret; } int nCr(int n,int r) { if(n>n; for(int i=1;i<=n;i++) cin>>a[i]; memset(inc,false,sizeof(inc)); fact[0]=1; ifact[0]=1; for(int i=1;i<=n;i++) { fact[i]=mul(fact[i-1],i); ifact[i]=mul(ifact[i-1],fp(i,mod-2)); } for(int i=1;i<=n;i++) { inc[i][i]=true; for(int j=i+1;j<=n;j++) inc[i][j]=(inc[i][j-1]&&(a[j]>a[j-1])); } memset(dp,0,sizeof(dp)); dp[n+1][0]=1; for(int i=n;i>=1;i--) { if(i==n) { dp[i][1]=1; continue; } for(int j=1;i+j-1<=n;j++) { if(!inc[i][i+j-1]) continue; for(int k=j;k>=0;k--) { //dp[i][j]=add(dp[i][j],dp[i+j][k]); int tans=dp[i+j][k]; tans=mul(tans,nCr(j,k)); dp[i][j]=add(dp[i][j],tans); } //if(i+j-1