#include <bits/stdc++.h>

#define FOR(i,b,e) for(int i=(b); i <= (e); ++i)
#define FORD(i,b,e) for(int i=(b); i >= (e); --i)
#define SIZE(c) (int) (c).size()
#define FORE(i,c) FOR(i,0,SIZE(c)-1)
#define FORDE(i,c) FORD(i,SIZE(c)-1,0)

#define pb push_back
#define mp make_pair
#define st first
#define nd second


using namespace std;

typedef long long ll;
typedef pair <int,int> pii;
typedef pair <ll,ll> pll;

typedef vector <int> VI;
typedef vector <bool> VB;
typedef vector <pii> VP;
typedef vector <ll> VL;
typedef vector <pll> VPL;

typedef vector <VI> VVI;
typedef vector <VL> VVL;
typedef vector <VB> VVB;
typedef vector <VP> VVP;

const int MOD = 1000000007;
const int INF = 1000000001;
const ll LINF = 1000000000000000001LL;

ll expo(ll a, ll n, ll mod) {
    ll ans = 1;

    while (n) {
        if (n & 1LL) ans = (ans * a) % mod;

        n >>= 1;
        a = (a * a) % mod;
    }

    return ans;
}

ll revMod(ll a, ll mod) {
    return expo(a, mod - 2, mod);
}

const int N = 1202;
int dp[N][N];
bool inc[N][N];

int fact[N], revFact[N];

void pre() {
    fact[0] = revFact[0] = 1;
    FOR(i,1,N-1) {
        fact[i] = ((ll) fact[i-1] * i) % MOD;
        revFact[i] = (revFact[i-1] * revMod(i, MOD)) % MOD;
    }
}

/*************************************************************************/

int main() {
    ios_base::sync_with_stdio(0);
    pre();
    
    int n;
    cin >> n;
    
    VI tab(n);
    FOR(i,0,n-1) {
        cin >> tab[i];
    }
    
    FOR(i,0,n-1) {
        inc[i][i] = true;
        FOR(j,i+1,n-1) {
            inc[i][j] = inc[i][j-1] && (tab[j-1] < tab[j]);
        }
    }
    
    FOR(i,0,n-1) {
        if (inc[0][i]) {
            dp[i][i+1] = 1;
        }
        
        FOR(len,1,i+1) if (dp[i][len]) {
            FOR(nextLen,1,min(len,n-1-i)) {
                int j = i + nextLen;
                if (!inc[i+1][j]) break;
                
                int diff = len - nextLen;
                ll factDiv = ((ll) fact[len] * revFact[diff]) % MOD;
                
                dp[j][nextLen] = (dp[j][nextLen] + factDiv * dp[i][len]) % MOD;
            }
        }
    }
    
    ll ans = 0;
    FOR(len,0,n) {
        ans += dp[n-1][len];
    }
    
    ans %= MOD;
    cout << ans;

    return 0;
}

/*************************************************************************/