#include using namespace std; typedef long long ll; const int MAXN = 1205; const int MOD = 1000000007; int N; int A[MAXN]; ll fac[MAXN]; ll inv[MAXN]; ll dp[MAXN][MAXN]; ll power(ll a, ll b) { if (b == 0) return 1; if (b == 1) return a; if (b % 2 == 0) return power(a*a % MOD, b/2); return a*power(a*a % MOD, (b-1)/2) % MOD; } ll getdp(int idx, int v) { if (idx > N) return 1; if (dp[idx][v] != -1) return dp[idx][v]; dp[idx][v] = 0; for (int i = idx; i - idx + 1 <= v && i <= N; i++) { if (i > idx && A[i] < A[i - 1]) break; int numterms = i - idx + 1; ll x = fac[v]*inv[v - numterms] % MOD; dp[idx][v] = (dp[idx][v] + x*getdp(i + 1, numterms)) % MOD; } return dp[idx][v]; } int main() { ios::sync_with_stdio(0); fac[0] = inv[0] = 1; for (int i = 1; i < MAXN; i++) { fac[i] = fac[i - 1]*i % MOD; inv[i] = power(fac[i], MOD - 2); } memset(dp, -1, sizeof(dp)); cin >> N; for (int i = 1; i <= N; i++) cin >> A[i]; ll ans = 1; for (int i = 2; i <= N; i++) { if (A[i] < A[i - 1]) break; ans = (ans + getdp(i + 1, i)) % MOD; } cout << ans << "\n"; return 0; }