#include using namespace std; #define vec vector #define ALL(x) (x).begin(), (x).end() #define mp make_pair #define mt make_tuple typedef pair< int, int > pii; typedef long long ll; typedef pair< ll, ll > pll; typedef unsigned long long ull; typedef long double ld; int const inf = 1000 * 1000 * 1000; ll const inf64 = 1ll * inf * inf; int const mod = inf + 7; inline int sum(int a, int b) { return (a + b) % mod; } inline int mul(int a, int b) { return (1ll * a * b) % mod; } int binpow(int n, int p) { if(!p) return 1; int q = binpow(n, p / 2); q = mul(q, q); if(p % 2) q = mul(q, n); return q; } int const N = 1205; int n; int m[N]; int dp[N][N]; int sm[N][N]; int fact[N]; int rfact[N]; int main() { fact[0] = 1; rfact[0] = 1; for(int i = 1;i < N;i++) { fact[i] = mul(fact[i - 1], i); rfact[i] = binpow(fact[i], mod - 2); } scanf("%d", &n); for(int i = 1;i <= n;i++) { scanf("%d", &m[i]); } for(int i = 1;i <= n;i++) { for(int j = i;j >= 1;j--) { if(j < i && m[j] > m[j + 1]) break; int len = i - j + 1; // >= len if(j == 1) { dp[i][len] = 1; continue; } for(int prev_len = len;prev_len <= i - len;prev_len++) { dp[i][len] = sum( dp[i][len], mul( dp[j - 1][prev_len], mul(fact[prev_len], rfact[prev_len - len]) ) ); } } } int res = 0; for(int i = 1;i <= n;i++) { res = sum(res, dp[n][i]); } printf("%d\n", res); return 0; }