#include <bits/stdc++.h>

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;
}