#include using namespace std; #define endl "\n" vector v; long n; #define MOD 1000000007 long fact[1205]; long invfact[1205]; long mul(long a, long b) { return (a * b) % MOD; } long add(long a, long b) { return (a + b) % MOD; } long fun(long i, long step) { if(i == n) return 1; long ans = 0; long last = i; long k = i+1; for(int j=1;(j<=step) && (i+j <= n);j++) { if(v[k] < v[last] ) break; long tmp = mul(mul(fact[step] , invfact[step-j]), invfact[j]); long tmpans = mul(tmp,fun(i+j,j)); ans = add(ans,tmpans); last++; k++; } if(ans == 0) ans = 1; return ans; } long pw(long a, long b) { if(b == 0) return 1; long ans = pw(a,b/2); ans = mul(ans,ans); if(b&1) ans = mul(ans,a); return ans; } long inv(long n) { return pw(n,MOD-2); } int main() { ios::sync_with_stdio(false); invfact[0] = fact[0] = 1; for(int i=1;i<1205;i++) { fact[i] = mul(i,fact[i-1]); invfact[i] = mul(inv(i),invfact[i-1]); } cin >> n; v.resize(n); for(int i=0;i> v[i]; } if(n == 1) { cout << 1 << endl; return 0; } long j = n; for(int i=1;i < n;i++) { if(v[i] < v[i-1]) { j = i; break; } } long ans = 0; for(int i=1;i<=j;i++) { ans = add(ans,fun(i,i)); } cout << ans << endl; return 0; }