#include using namespace std; const int MX = 1200, md = 1000000007; int a[MX], dp[MX + 1][MX + 1]; bool ok[MX][MX]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", a + i); for (int i = 0; i < n; i++) { ok[i][i] = true; for (int j = i + 1; j < n; j++) ok[i][j] = ok[i][j - 1] && a[j] > a[j - 1]; } for (int i = 0; i <= n; i++) dp[n][i] = 1; for (int i = n - 1; i >= 0; i--) { for (int j = 1; i + j <= n; j++) { if (ok[i][i + j - 1] == false) continue; long long f = 1; for (int k = 0; k <= j && i + j + k <= n; k++) { dp[i][j] = (dp[i][j] + dp[i + j][k] * f) % md; f = (f * (j - k)) % md; } } for (int j = n - i + 1; j <= n; j++) dp[i][j] = dp[i][j - 1]; } int ans = 0; for (int i = 0; i <= n; i++) { ans += dp[0][i]; ans %= md; } printf("%d\n", ans); return 0; }