-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
using ll = long long;
using ii = pair<int, int>;
const int MOD = 1e9+7;
inline int add(int a, int b) {
int c = a+b;
if (c > MOD) c -= MOD;
return c;
}
int H[105], DP[1005];
int main() {
cin.tie(0)->sync_with_stdio(0);
int N; cin >> N;
for (int i = 0; i < N; ++i) cin >> H[i];
int mn = *min_element(H, H+N), mx = *max_element(H, H+N), ans = 0;
do {
fill(DP, DP+mx+1, 1);
for (int i = 0; i < N; ++i) {
reverse(DP, DP+H[i]+1);
fill(DP+H[i]+1, DP+mx+1, 0);
partial_sum(DP, DP+mx+1, DP, add);
}
ans = add(DP[0], ans);
for (int i = 0; i < N; ++i) --H[i];
} while (N&1 && mn-- && mx--);
cout << ans;
}