#include #include #include using namespace std; int tab[4000][4000]; int main() { int n; scanf("%d", &n); vector v; long long int sum = 0; const int mod = 1000000007; for(int i = 0; i < n; i++) { scanf("%d", &tab[i][i]); v.push_back(tab[i][i]); sum += tab[i][i]; sum %= mod; } for(int k = 1; k < n; k++) for(int i = 0; i < n-k; i++) { tab[i][i+k] = max(tab[i][i+k-1], tab[i+1][i+k]); v.push_back(tab[i][i+k]); sum += tab[i][i+k]; sum %= mod; } while(v.size() > 1) { vector v2; for(int i = 0; i < v.size()-1; i++) { v2.push_back(max(v[i], v[i+1])); sum += v2.back(); sum %= mod; } v.swap(v2); } printf("%lld\n", sum); return 0; }