#include #include #define pb push_back #define pf push_front #define pp pop_back #define sz(a) (int)(a.size()) #define mp make_pair #define F first #define S second #define next _next #define prev _prev #define left _left #define right _right #define y1 _y1 #define all(x) x.begin(), x.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair pii; typedef pair pll; const int N = (int)1e6 + 123; const ll INF = (ll)1e18 + 123; const int inf = (int)1e9 + 123; const int MOD = (int)1e9 + 7; void megaRandom() { unsigned int FOR; asm("rdtsc" : "=A"(FOR)); srand(FOR); } int n, a[N], b[N]; int ptr, res; int add(int a, int b) { a += b; if(a >= MOD) a -= MOD; return a; } int mx[N]; int main() { megaRandom(); cin >> n; for(int i = 1; i <= n; i ++) cin >> a[i]; for(int len = 1; len <= n; len ++) { for(int i = 1; i + len - 1 <= n; i ++) { int j = i + len - 1; mx[i] = max(mx[i], a[j]); b[ ++ ptr] = mx[i]; } } n = ptr; memset(mx, 0, sizeof mx); for(int i = 1; i <= n; i ++) a[i] = b[i]; for(int len = 1; len <= n; len ++) { for(int i = 1; i + len - 1 <= n; i ++) { int j = i + len - 1; mx[i] = max(mx[i], a[j]); res = add(res, mx[i]); } } cout << res; return 0; }