#include <bits/stdc++.h>
int n, num[1001], de, ans[4][2];
void rev(int l, int r) {
  int t;
  if (l > r) l ^= r ^= l ^= r;
  while (l < r) {
    t = num[l];
    num[l] = num[r];
    num[r] = t;
    ++l, --r;
  }
}
void Output() {
  printf("%d\n", de);
  for (int i = de; i >= 1; i--) {
    if (ans[i][0] > ans[i][1]) {
      printf("%d %d\n", ans[i][1], ans[i][0]);
    } else {
      printf("%d %d\n", ans[i][0], ans[i][1]);
    }
  }
}
bool Dfs() {
  int i, l, r;
  for (i = 1; i <= n; i++)
    if (num[i] != i) break;
  if (i == n + 1 && de <= 3) {
    Output();
    return true;
  }
  if (de == 3) return false;
  ++de;
  l = i;
  for (i = l; i <= n; i++)
    if (num[i] == l) break;
  rev(i, l);
  ans[de][0] = i;
  ans[de][1] = l;
  if (Dfs()) return true;
  rev(i, l);
  --de;
  for (i = n; i >= 1; i--)
    if (num[i] != i) break;
  if (i == 0 && de <= 3) {
    Output();
    return true;
  }
  ++de;
  r = i;
  for (i = r; i >= 1; i--)
    if (num[i] == r) break;
  rev(r, i);
  ans[de][0] = i;
  ans[de][1] = r;
  if (Dfs()) return true;
  rev(r, i);
  --de;
  return false;
}
int main() {
  int i;
  while (~scanf("%d", &n)) {
    for (i = 1; i <= n; i++) scanf("%d", &num[i]);
    de = 0;
    Dfs();
  }
  return 0;
}
