#pragma comment(linker, ”/STACK:38777216“ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int N = 1205; const int inf = 1000 * 1000 * 1000; const int mod = 1000 * 1000 * 1000 + 7; int n; int a[N]; long long f[N],c[N]; long long answ , dp[N][N]; long long binpow(long long a,long long b){ if(b == 0)return 1ll; if(b % 2)return (binpow(a , b - 1) * a) % mod; long long t = binpow(a , b / 2); return (t * t) % mod; } long long A(long long n,long long k){ return (f[n] * c[n - k]) % mod; } int main(){ scanf("%d",&n); f[0] = c[0] = 1ll; for(int i=1;i<=n;i++){ f[i] = (f[i-1] * (long long)i) % mod; c[i] = binpow(f[i] , mod - 2); } for(int i=1;i<=n;i++)scanf("%d",&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] = 1ll; if(i == n){ answ++; answ %= mod; } 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)) % mod; dp[i][i-j+1] %= mod; } if(i == n){ answ += dp[i][i-j+1]; answ %= mod; } } } cout<