#include using namespace std; const int N = 1210; int a[N]; int dp[N][N]; int fact[N][N]; const int mod = 1e+9 + 7; void add(int &x, int y) { x = (x + y) % mod; } int mul(int64_t x, int y) { return x * y % mod; } int main() { // freopen("input.txt", "r", stdin); int n; scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); fact[i][0] = 1; for (int j = 1; j <= i; ++j) fact[i][j] = mul(fact[i][j - 1], i - j + 1); } for (int i = 1; i <= n; ++i) { if (i != 1 && a[i] < a[i - 1]) break; dp[i][i] = 1; } for (int j = n; j >= 1; --j) { for (int i = j; i <= n; ++i) { for (int k = 1; k + i - 1 <= n && k <= j; ++k) { if (k != 1 && a[i + k - 1] < a[i + k - 2]) break; add(dp[k][i + k - 1], mul(dp[j][i - 1], fact[j][k])); } } } int ans = 0; // for (int i = 1; i <= n; ++i, cout << "\n") // for (int j = 1; j <= n; ++j) // printf("%d ", dp[i][j]); for (int i = 1; i <= n; ++i) add(ans, dp[i][n]); printf("%d", ans); return 0; }