#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long #define N (ll)(1e6+3) #define INF (ll)(1e18+1) #define EPS (1e-9) #define PI (3.14159265358979323846) #define ld double #define MOD (ll)(1e9+7) ll fac[N], ifac[N]; ll powmod(ll b, ll p) { if (p == 0) return 1; if (p%2) return (b*powmod(b, p-1))%MOD; ll a = powmod(b, p/2); return (a*a)%MOD; } void genFac(ll nn) { fac[0] = 1; for (ll i = 1; i < nn; i++) fac[i] = (fac[i-1]*i)%MOD; ifac[nn-1] = powmod(fac[nn-1], MOD-2); for (ll i = nn-1; i >= 0; i--) ifac[i-1] = (ifac[i]*i)%MOD; } ll nPk(ll n, ll k) { return (fac[n]*ifac[n-k])%MOD; } ll a[N]; ll dp[1205][1205]; void solve() { genFac(1201); ll maxn = 1201; ll n; cin >> n; for (ll i = 1; i <= n; i++) { cin >> a[i]; } for (ll i = 1; i <= n; i++) { ll maxk = 1; ll j = i; while (j+1 <= n && a[j+1] > a[j]) { maxk++; j++; } if (i != 1) for (ll k = 1; k <= maxk; k++) { for (ll kk = k; kk <= i; kk++) { dp[i-1+k][k] = (dp[i-1+k][k] + (dp[i-1][kk]*nPk(kk,k))%MOD) %MOD; } } else for (ll k = 1; k <= maxk; k++) { dp[i-1+k][k] = 1; } } ll ans = 0; for (ll kk = 1; kk <= maxn; kk++) { ans = (ans+dp[n][kk]) % MOD; } cout << ans << endl; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); }