#include #include #include #include #include using namespace std; int n; int m[1201]; long long was[1201], dp[1201][1201]; const long long mod = 1e9+7; long long CNK[1201][1201]; long long fact(int k) { if (was[k]) return was[k]; long long res = 1; for (int i = 1; i <= k; ++i) res *= i, res %= mod; return was[k] = res; } long long pow(long long x, long long y) { if (y == 0) return 1; if (y % 2 == 0) { long long t = pow(x, y/2); return (t*t)%mod; } return (pow(x, y-1)*x) % mod; } long long inv(long long x) { return pow(x, mod-2); } long long cnk(int n, int k) { if (k > n) return 0; if (CNK[n][k]) return CNK[n][k]; long long ans = (fact(n) * inv(fact(k))) % mod; ans *= inv(fact(n-k)); ans %= mod; return CNK[n][k] = ans; } int main() { cin >> n; for (int i = 0; i < n; ++i) cin >> m[i]; dp[n][0]=1; m[n] = 1e9; for (int i = n-1; i >= 0; --i) { int last = m[i]; for (int l = 1; l <= n-i; ++l) { if (m[i+l-1] < last)break; last = m[i+l-1]; for (int j = 0; j <= l; ++j) { dp[i][l] += (((cnk(l, j) * fact(j)) % mod) * dp[i+l][j])%mod; dp[i][l] %= mod; } } } long long ans = 0; for (int i = 0; i <= n; ++i) ans += dp[0][i], ans %= mod; cout << ans << endl; return 0; }