#include using namespace std; #define forn(i, x, n) for (int i = int(x); i <= int(n); ++i) #define for1(i, n, x) for (int i = int(n); i >= int(x); --i) #define file "" #define x first #define y second #define pb push_back typedef long long ll; typedef pair PII; typedef double ld; typedef vector vi; const int N = 2e3 + 1; const int INF = 1e9 + 9; const int B = 1e9 + 7; int n, a[N]; ll d[N][N], c[N][N], f[N]; bool srt[N][N]; void rlx(ll &a, ll b) { a = (a + b) % B; } int main () { #ifdef machine42 freopen (file"in", "r", stdin); // freopen (file"out", "w", stdout); #endif ios_base :: sync_with_stdio(0); cin >> n; f[0] = 1; forn(i, 1, n) { cin >> a[i]; f[i] = f[i - 1] * i % B; } c[0][0] = 1; forn(i, 1, n) { srt[i][i] = 1; for (int j = i + 1; j <= n && a[j] > a[j - 1]; ++j) srt[i][j] = 1; c[i][0] = 1; forn(j, 1, i) c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % B; } forn(i, 1, n) forn(j, 1, i) c[i][j] = c[i][j] * f[j] % B; forn(i, 1, n) { if (srt[1][i]) d[i][i] = 1; forn(j, 1, i - 1) if (srt[i - j + 1][i]) forn(k, j, i - j) rlx(d[i][j], d[i - j][k] * c[k][j]); } ll ans = 0; forn(i, 1, n) rlx(ans, d[n][i]); cout << ans << "\n"; return 0; }