#include "bits/stdc++.h" using namespace std; typedef long long ll; typedef pair < int, int > ii; const int N = 1200 + 5; const int mod = 1e9 + 7; inline int add(int x, int y) { return x + y >= mod ? x + y - mod : x + y; } inline int mul(int x, int y) { return (ll) x * y % mod; } int fe(int x, int k) { int res = 1; while(k) { if(k & 1) res = mul(res, x); x = mul(x, x); k >>= 1; } return res; } int n; int a[N], fact[N], inv[N], dp[N][N]; bool sorted[N][N]; int c(int n, int r) { return mul(fact[n], mul(inv[r], inv[n - r])); } int f(int sum, int last) { if(sum == n) return 1; int &r = dp[sum][last]; if(r != -1) return r; r = 0; for(int i = 1; i <= last and sum + i <= n; i++) { if(sorted[sum + 1][sum + i]) r = add(r, mul(mul(f(sum + i, i), c(last, i)), fact[i])); } return r; } int main() { fact[0] = inv[0] = 1; for(int i = 1; i < N; i++) { fact[i] = mul(fact[i - 1], i); inv[i] = mul(inv[i - 1], fe(i, mod - 2)); } scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", a + i); } for(int i = 1; i <= n; i++) { sorted[i][i] = 1; for(int j = i + 1; j <= n; j++) { if(a[j] < a[j - 1]) break; sorted[i][j] = 1; } } memset(dp, -1, sizeof(dp)); int ans = 0; for(int i = 1; i <= n; i++) ans = add(ans, f(i, i) * sorted[1][i]); printf("%d\n", ans); return 0; }