#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... |