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