#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e4 + 5;
const int mod = 1e6 + 7;
ll dp[2][N], a[N];
ll add(ll a, ll b){
    a += b;
    return a % mod;
}
int main(){
    ll n;
    cin>>n;
    for (int i = 1;i <= n; ++i)
		cin>>a[i];
		
    dp[0][0] = 1;
    ll mx = 0, ok = 0;
    for(ll i = 1; i <= n; ++i){
        for(ll j = 2; j <= i; ++j)
            dp[i & 1][j] = (dp[i+1&1][j] * j % mod + dp[i+1&1][j - 1]) % mod;
        if(a[i] != 1ll) 
			ok = 1;
        dp[i & 1][0] = 1;
        if(a[i] != 1ll)
            dp[i & 1][mx] = add(dp[i & 1][mx], (a[i] - 1ll) * dp[i + 1 & 1][0]) % mod;
        if(ok)
			dp[i & 1][1] = 1ll;
        mx = max(mx, a[i]);
    }
    int ans = 0;
    for(ll i = 1; i <= n;++i)
        ans = add(ans, dp[n & 1][i]);
    cout<< add(ans, 1) <<'\n';
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |