#include #include #include #include #include using namespace std; const long long MOD = 1e9 + 7; long long ans; int n, m; long long arr1[1111]; long long max1[1111][1111]; long long max2[1000 * 1011][25]; vector arr2; void precalc() { for(int i = 1; i <= n; i++) max1[i][i] = arr1[i]; for(int i = 1; i <= n; i++) { for(int j = i + 1; j <= n; j++) { max1[i][j] = max(max1[i][j - 1], arr1[j]); } } arr2.push_back(-111); for(int k = 1; k <= n; k++) { for(int i = 1; i <= n - k + 1; i++) { int j = i + k - 1; arr2.push_back(max1[i][j]); } } m = arr2.size() - 1; for(int i = 1; i <= m; i++) { max2[i][0] = arr2[i]; } for(int k = 1; k <= 24; k++) { for(int i = 1; i <= m - (1 << k) + 1; i++) { max2[i][k] = max(max2[i][k - 1], max2[i + (1 << (k - 1))][k - 1]); } } } long long maxs(long long a, long long b) { int z = 0; for(int i = 2; i + a <= b; i *= 2) { z++; } return max(max2[a][z], max2[b - (1 << z) + 1][z]); } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ cin >> n; if(n > 1000) cout << 0, exit(0); for(int i = 1; i <= n; i++) { cin >> arr1[i]; } precalc(); for(int k = 1; k <= m; k++) { for(int i = 1; i <= m - k + 1; i++) { ans += maxs(i, i + k - 1); //cout << maxs(i, i + k - 1); ans %= MOD; } } cout << ans; return 0; }