#include <bits/stdc++.h>
using namespace std;
int n;
int a[100002];
int mini[100002][21];
vector<pair<int, int> > vp;
int f(int l, int r, int m) {
  if (l == r) {
    for (int i = 0; i < a[l] - m; i++) {
      vp.push_back(make_pair(l, r));
    }
    return a[l] - m;
  }
  int i = 0;
  for (i = 0;; i++)
    if (l + (1 << i) > r) break;
  int minIndex = -1;
  if (a[mini[l][i - 1]] < a[mini[r - (1 << (i - 1)) + 1][i - 1]]) {
    minIndex = mini[l][i - 1];
  } else {
    minIndex = mini[r - (1 << (i - 1)) + 1][i - 1];
  }
  for (int i = 0; i < a[minIndex] - m; i++) {
    vp.push_back(make_pair(l, r));
  }
  if (minIndex == l) {
    return a[minIndex] - m + f(l + 1, r, a[minIndex]);
  }
  if (minIndex == r) {
    return a[minIndex] - m + f(l, r - 1, a[minIndex]);
  } else {
    return a[minIndex] - m + f(l, minIndex - 1, a[minIndex]) +
           f(minIndex + 1, r, a[minIndex]);
  }
}
int main() {
  cout << setprecision(9);
  cin >> n;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n; i++) mini[i][0] = i;
  for (int i = 1; i < 21; i++) {
    for (int j = 0; j + (1 << i) - 1 < n; j++) {
      if (a[mini[j][i - 1]] < a[mini[j + (1 << (i - 1))][i - 1]]) {
        mini[j][i] = mini[j][i - 1];
      } else {
        mini[j][i] = mini[j + (1 << (i - 1))][i - 1];
      }
    }
  }
  cout << f(0, n - 1, 0) << endl;
  for (int i = 0; i < vp.size(); i++)
    cout << 1 + vp[i].first << " " << 1 + vp[i].second << endl;
  return 0;
}
