#include<bits/stdc++.h>
using namespace std;
using ll=long long;
constexpr ll N=1e4+5;
constexpr ll mod=1e6+7;
ll dp[2][N];
ll v[N];
ll add(ll a, ll b){
    a+=b;
    return a%mod;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    ll n;
    cin>>n;
    for(int i=1;i<=n;++i)cin>>v[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+dp[i+1&1][j-1])%mod;
        if(v[i]!=1)ok=1;
        dp[i&1][0]=1;
        if(v[i]!=1)
            dp[i&1][mx]=add(dp[i&1][mx],(v[i]-1ll)*dp[i+1&1][0])%mod;
        if(ok)dp[i&1][1]=1ll;
        mx=max(mx,v[i]);
    }
    int ans=0;
    for(ll i=1;i<=n;++i)
        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... |