#include #include #include #include #include #include #include void maxt(int n_a, int* a, int n_b, int* b) { int p = 0; for(int k = 0; k < n_a; k++) for(int i = 0; i < n_a-k; i++) { int j = i + k; int temp = a[i]; for(int n = i; n <= j; n++) { if(a[n] > temp) temp = a[n]; } b[p] = temp; p++; } } int solve(int n_a, int* a) { // Return the sum of S(S(A)) modulo 10^9+7. int sum = 0; int n_b = (n_a * (n_a + 1)) / 2; int n_c = (n_b * (n_b + 1)) / 2; int *b = malloc(sizeof(int) * n_b); int *c = malloc(sizeof(int) * n_c); maxt(n_a, a, n_b, b); maxt(n_b, b, n_c, c); for(int i = 0; i < n_c; i++) { if((sum + c[i]) < 1000000007) sum = sum + c[i]; } return sum; } int main() { int n; scanf("%i", &n); int *a = malloc(sizeof(int) * n); for (int a_i = 0; a_i < n; a_i++) { scanf("%i",&a[a_i]); } int result = solve(n, a); printf("%d\n", result); return 0; }