#include <algorithm>
#include <iostream>
using namespace std;
const int  N = 10000;
const int MD = 1000007;
int aa[N], pp[N], ch[N], xx[N];
int main() {
	ios_base::sync_with_stdio(false), cin.tie(NULL);
	int n; cin >> n;
	for (int i = 0; i < n; i++)
		cin >> aa[i], aa[i]--;
	for (int p = 0, i = 0; i < n; i++)
		pp[i] = p = max(p, aa[i]);
	int ans = ch[0] = xx[0] = 1;
	for (int i = n - 1; i; i--) {
		long long p = aa[i];
		for (int m = 0; m < n - i; m++, p = p * (pp[i - 1] + 1) % MD)
			ans = (ans + ch[m] * p % MD * xx[n - i - 1 - m]) % MD;
		for (int m = 0; m < n - i; m++)
			xx[n - i] = (xx[n - i] + (long long) ch[m] * xx[n - i - 1 - m]) % MD;
		for (int m = n - i; m; m--)
			ch[m] = (ch[m] + ch[m - 1]) % MD;
	}
	cout << ans << '\n';
	return 0;
}
| # | 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... |