#include using namespace std; typedef long long ll; const int Maxn = 1205; const int mod = 1000000007; int fac[Maxn], inv[Maxn]; int n; int a[Maxn]; int dp[Maxn][Maxn]; int res; int Inv(int a) { int res = 1, p = mod - 2; while (p) { if (p & 1) res = ll(res) * a % mod; p >>= 1; a = ll(a) * a % mod; } return res; } int main(){ fac[0] = inv[0] = 1; for (int i = 1; i < Maxn; i++) { fac[i] = ll(i) * fac[i - 1] % mod; inv[i] = Inv(fac[i]); } scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); int j = 1; while (j < n && a[j - 1] < a[j]) j++; for (int i = 1; i <= j; i++) dp[i][i] = 1; for (int i = 0; i < n; i++) { int j = i + 1; while (j < n && a[j - 1] < a[j]) j++; for (int k = 1; k <= i; k++) if (dp[i][k] > 0) for (int z = min(k, j - i); z > 0; z--) dp[i + z][z] = (dp[i + z][z] + ll(dp[i][k]) * fac[k] % mod * inv[k - z]) % mod; } for (int j = 1; j <= n; j++) res = (res + dp[n][j]) % mod; printf("%d\n", res); return 0; }