#include <bits/stdc++.h>

using namespace std;

const int md = 1000000007;

inline void add(int &a, int b) {
  a += b;
  if (a >= md) {
    a -= md;
  }
}

inline int mul(int a, int b) {
  return (long long) a * b % md;
}

const int N = 1234;

int fact[N];
int C[N][N];
int f[N][N];
int a[N];

int main() {
  fact[0] = 1;
  for (int i = 1; i < N; i++) {
    fact[i] = mul(fact[i - 1], i);
  }
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      if (j == 0) C[i][j] = 1; else
      if (i == 0) C[i][j] = 0;
      else C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % md;
    }
  }
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", a + i);
  }
  f[0][n] = 1;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j <= n; j++) {
      if (f[i][j] == 0) {
        continue;
      }
      for (int k = i; k < i + j && k < n; k++) {
        if (k > i && a[k] < a[k - 1]) {
          break;
        }
        if (i == 0) {
          add(f[k + 1][k - i + 1], 1);
        } else {
          add(f[k + 1][k - i + 1], mul(f[i][j], mul(C[j][k - i + 1], fact[k - i + 1])));
        }
      }
    }
  }
  int ans = 0;
  for (int j = 1; j <= n; j++) {
    add(ans, f[n][j]);
  }
  printf("%d\n", ans);
  return 0;
}