#include using namespace std; #define pb push_back #define mp make_pair #define forn(i, n) for (int i = 0; i < (int)(n); ++i) typedef long long LL; typedef pair PII; const int MOD = int(1e9) + 7; int n; int a[1205], to[1205]; int d[1205][1205]; int main() { //freopen("input.txt", "r", stdin); scanf("%d", &n); forn(i, n) scanf("%d", a + i), --a[i]; forn(i, n) { to[i] = i; while (to[i] < n - 1 && a[to[i]] < a[to[i] + 1]) { ++to[i]; } } memset(d, 0, sizeof d); for (int i = 1; i <= to[0] + 1; ++i) { d[i][i] = 1; } for (int i = 1; i < n; ++i) { for (int j = 1; j <= n; ++j) if (d[i][j]) { int val = d[i][j]; for (int k = 1; k <= min(j, to[i] - i + 1); ++k) { val = (LL)val * (j - k + 1) % MOD; d[i + k][k] += val; if (d[i + k][k] >= MOD) { d[i + k][k] -= MOD; } } } } int ans = 0; forn(i, n + 1) { ans += d[n][i]; if (ans >= MOD) { ans -= MOD; } } cout << ans << endl; return 0; }