#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6;
int l_min[MAXN];
int r_min[MAXN];
int l_max[MAXN];
int r_max[MAXN];
int main() {
  int n;
  cin >> n;
  vector<int> v(n);
  for (int i = 0; i < n; i++) cin >> v[i];
  stack<pair<int, int> > S;
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    while (!S.empty() && S.top().first > v[i]) S.pop();
    int pos;
    if (S.empty())
      pos = -1;
    else
      pos = S.top().second;
    l_min[i] = pos + 1;
    S.push(make_pair(v[i], i));
  }
  while (!S.empty()) S.pop();
  for (int i = n - 1; i >= 0; i--) {
    while (!S.empty() && S.top().first >= v[i]) S.pop();
    int pos;
    if (S.empty())
      pos = n;
    else
      pos = S.top().second;
    r_min[i] = pos - 1;
    S.push(make_pair(v[i], i));
  }
  while (!S.empty()) S.pop();
  for (int i = 0; i < n; i++) {
    while (!S.empty() && S.top().first < v[i]) S.pop();
    int pos;
    if (S.empty())
      pos = -1;
    else
      pos = S.top().second;
    l_max[i] = pos + 1;
    S.push(make_pair(v[i], i));
  }
  while (!S.empty()) S.pop();
  for (int i = n - 1; i >= 0; i--) {
    while (!S.empty() && S.top().first <= v[i]) S.pop();
    int pos;
    if (S.empty())
      pos = n;
    else
      pos = S.top().second;
    r_max[i] = pos - 1;
    S.push(make_pair(v[i], i));
  }
  while (!S.empty()) S.pop();
  for (int i = 0; i < n; i++) {
    ans -= 1LL * v[i] * (i - l_min[i] + 1) * (r_min[i] - i + 1) - v[i];
    ans += 1LL * v[i] * (i - l_max[i] + 1) * (r_max[i] - i + 1) - v[i];
  }
  cout << ans << endl;
  return 0;
}
