#include <bits/stdc++.h>
using namespace std;
int v[100005];
stack<pair<int, int> > S;
vector<pair<int, int> > Q;
int main() {
  int N;
  scanf("%d", &N);
  for (int i = 0; i < N; i++) scanf("%d", &v[i]);
  ++N;
  v[N] = 0;
  for (int i = 0; i < N; i++) {
    int a = v[i];
    if (S.empty() && !a) continue;
    if (S.empty() || a > S.top().first) {
      int l = (S.empty() ? 0 : S.top().first);
      for (int j = l + 1; j <= a; j++) S.push(pair<int, int>(j, i));
    }
    if (a < S.top().first) {
      int l = S.top().first;
      for (int j = l; j > a; j--) {
        Q.push_back(pair<int, int>(S.top().second, i));
        S.pop();
      }
    }
  }
  cout << Q.size() << endl;
  for (int i = 0; i < (int)Q.size(); i++)
    printf("%d %d\n", Q[i].first + 1, Q[i].second);
}
