#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define f first #define s second #define ll long long #define ull unsigned long long #define mp make_pair #define pb push_back #define vi vector #define ld long double #define pii pair #define y1 sda using namespace std; const int N = 1500, mod = int(1e9) + 7; int n, a[N]; ll dp[N][N], s[N][N], f[N + 10] , d[N + 10]; ll modpow(ll a,ll b){ ll res = 1; while(b){ if(b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } ll A(int n,int k){ if(k > n) return 0; return f[n] * d[n - k] % mod; } int main () { scanf("%d",&n); for(int i = 1; i <= n; i++){ scanf("%d",&a[i]); } dp[n + 1][1] = 1; for(int i = 1; i <= n; i++){ s[n + 1][i] = 1; } f[0] = d[0] = 1; for(int i = 1; i <= N; i++){ f[i] = f[i - 1] * i % mod; d[i] = modpow(f[i], mod - 2); } for(int i = n; i > 0; i--){ dp[i][1] = 1; for(int j = i + 1; j <= n; j++){ if(a[j] < a[j - 1]) break; dp[i][j - i + 1] = 1; if(j == n) { break; } ll res = 0; int len = j - i + 1; for(int k = 1; k <= len; k++){ res = (res + A(len,k) * dp[j + 1][k]) % mod; } dp[i][j - i + 1] = res; } } ll res = 0; for(int i = 1; i <= n; i++){ res = (res + dp[1][i]) % mod; } printf("%lld\n", res); return 0; }