#include <bits/stdc++.h>
using namespace std;
const int MAXLEN = 3e5 + 5;
int n, m, a[MAXLEN], LOG2[MAXLEN];
struct num {
int id, w;
bool operator < (const num &rhs) const {
return rhs.w > w;
}
bool operator > (const num &rhs) const {
return rhs.w < w;
}
} maxdp[MAXLEN][31];
void init() {
LOG2[0] = -1;
for (int i = 1; i <= MAXLEN; i++)
LOG2[i] = LOG2[i >> 1] + 1;
for (int i = 1; i <= n; i++)
maxdp[i][0].w = a[i], maxdp[i][0].id = i;
int p = LOG2[n];
for (int i = 1; i <= p; i++) {
for (int j = 1; j + (1 << i) <= n + 1; j++) {
maxdp[j][i] = max(maxdp[j][i - 1], maxdp[j + (1 << (i - 1))][i - 1]);
}
}
return;
}
num query(int l, int r) {
int len = r - l + 1;
int k = LOG2[len];
return max(maxdp[l][k], maxdp[r - (1 << k) + 1][k]);
}
signed main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
init();
for (int i = 1; i <= n; i++) {
if (a[i] > n - i) {
puts("0");
continue;
}
num cur = query(max(a[i] + i, 1), n);
int ai = a[cur.id], ans = cur.id - i;
if (ai < ans) {
puts("0");
continue;
}
printf("1 %d\n", ans);
}
return 0;
}