#include using namespace std; int n; int a[1202]; long long f[1202],c[1202],ans , dp[1202][1202]; long long ast(long long a,long long b){ if(b == 0) return 1; if(b%2) return (ast(a , b - 1) * a) % 1000000007; long long t = ast(a , b / 2); return (t * t) % 1000000007; } long long A(long long n,long long k){ return (f[n] * c[n - k]) % 1000000007; } int main(){ cin>>n; f[0] = c[0] = 1ll; for(int i=1;i<=n;i++){ f[i] = (f[i-1] * (long long)i) % 1000000007; c[i] = ast(f[i] , 1000000005); } for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ for(int j=i;j>=1;j--){ if(j != i && a[j] > a[j+1]) break; if(j==1){ dp[i][i]=1; if(i == n) ans=(ans+1)%1000000007; continue; } for(int h=i-j+1;h<=j-1;h++){ dp[i][i-j+1]+=(dp[j-1][h]*A(h,i-j+1))%1000000007; dp[i][i-j+1]%=1000000007; } if(i==n) ans=(ans+dp[i][i-j+1])%1000000007; } } cout<