#include <bits/stdc++.h>
using namespace std;
int N;
int a[5][1010];
int history[5][2];
void swap2(int step, int l, int r) {
  int i;
  for (i = l; i < l + r - 1 - i; i++) swap(a[step][i], a[step][l + r - 1 - i]);
}
bool check(int step) {
  int i;
  for ((i) = 0; (i) < (int)(N); (i)++)
    if (a[step][i] != i + 1) return false;
  return true;
}
bool dfs(int step) {
  int i, j;
  if (check(step)) {
    cout << step << endl;
    for ((i) = 0; (i) < (int)(step); (i)++)
      cout << history[i][0] + 1 << ' ' << history[i][1] << endl;
    return true;
  }
  if (step == 3) return false;
  int bad = 0;
  set<int> s;
  if (a[step][0] != 1) {
    s.insert(0);
    s.insert(1);
    bad++;
  }
  for ((i) = 0; (i) < (int)(N - 1); (i)++)
    if (abs(a[step][i] - a[step][i + 1]) != 1) {
      bad++;
      for (j = i; j <= i + 2; j++) s.insert(j);
    }
  if (a[step][N - 1] != N) {
    s.insert(N);
    s.insert(N - 1);
    bad++;
  }
  if (bad > 2 * (3 - step)) return false;
  vector<int> v;
  for (__typeof((s).begin()) itr = (s).begin(); itr != (s).end(); itr++)
    v.push_back(*itr);
  for ((i) = 0; (i) < (int)(N); (i)++) a[step + 1][i] = a[step][i];
  for ((i) = 0; (i) < (int)(v.size()); (i)++)
    for (j = i + 1; j < v.size(); j++)
      if (v[j] - v[i] > 1) {
        swap2(step + 1, v[i], v[j]);
        history[step][0] = v[i];
        history[step][1] = v[j];
        if (dfs(step + 1)) return true;
        swap2(step + 1, v[i], v[j]);
      }
  return false;
}
int main(void) {
  int i;
  cin >> N;
  for ((i) = 0; (i) < (int)(N); (i)++) {
    int x;
    cin >> x;
    a[0][x - 1] = i + 1;
  }
  dfs(0);
  return 0;
}
