//By Don4ick #include const int N = 1250; const int MOD = (int)1e9 + 7; using namespace std; int n, m[N]; long long dp[N][N], pref[N][N], f[N], b[N]; long long binpow(long long a, long long k) { long long res = 1; while(k) { if (k & 1) res = res * a % MOD; a = a * a % MOD; k /= 2; } return res; } long long C(int nn, int kk) { return f[nn] * b[nn - kk] % MOD; } int main() { // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); cin >> n; for (int i = 1; i <= n; i++) cin >> m[i]; dp[n + 1][0] = 1; f[0] = 1; for (int i = 1; i <= n; i++) f[i] = f[i - 1] * i % MOD; for (int i = 0; i <= n; i++) b[i] = binpow(f[i], MOD - 2); for (int i = n; i >= 1; i--) { for (int j = 1; j <= n - i + 1; j++) { if (j > 1 && m[i + j - 1] < m[i + j - 2]) break; for (int k = 0; k <= j; k++) dp[i][j] = (dp[i][j] + (C(j, k) * dp[i + j][k])) % MOD; } } long long ans = 0; for (int i = 1; i <= n; i++) ans = (ans + dp[1][i]) % MOD; cout << ans << endl; return 0; }