#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

struct pebble {
	int spots;
	int diff;
	int sum;
	bool accessible;
};
struct pebble pebbles[1000000];
struct pebble *lookupD[1000000];
struct pebble *lookupS[1000000];
int stack[1000000];
int *stackPtr;
int N;
int farest=0;
struct pebble **jumpable;

struct pebble **bsD(struct pebble **l, struct pebble **r, int diff) {
	struct pebble **m;
	
	while (r>l) {
		m=l+(r-l)/2;
		if ((*m)->diff==diff)
			return m;
		if ((*m)->diff>diff)
			r=m;
		else
			l=m+1;
	}
	return NULL;
}

int compD(void *p1, void *p2) {
	return (*(struct pebble**)p1)->diff - (*(struct pebble**)p2)->diff;
}

struct pebble **bsS(struct pebble **l, struct pebble **r, int sum) {
	struct pebble **m;
	
	while (r>l) {
		m=l+(r-l)/2;
		if ((*m)->sum==sum)
			return m;
		if ((*m)->sum>sum)
			r=m;
		else
			l=m+1;
	}
	return NULL;
}

int compS(void *p1, void *p2) {
	return (*(struct pebble**)p1)->sum - (*(struct pebble**)p2)->sum;
}

int main() {
	int diff, sum;
	int i;
	while (scanf("%d", &N) && N) {
		for (i=0; i<N; i++) {
			scanf("%d", &pebbles[i].spots);
			pebbles[i].diff=i-pebbles[i].spots;
			pebbles[i].sum=i+pebbles[i].spots;
			pebbles[i].accessible=false;
			lookupD[i]=pebbles+i;
			lookupS[i]=pebbles+i;
		}
		qsort(lookupD, N, sizeof(struct pebble*), compD);
		qsort(lookupS, N, sizeof(struct pebble*), compS);
		pebbles[0].accessible=true;
		stack[0]=0; stackPtr=stack+1;
		farest=0;
		while (--stackPtr>=stack) {
			i=*stackPtr;
			//if (!pebbles[i].accessible) continue;
			if (farest<i) farest=i;
			diff=i+pebbles[i].spots;
			sum=i-pebbles[i].spots;
			jumpable=bsD(lookupD, lookupD+N, diff);
			if (jumpable) {
				for (; (jumpable>=lookupD) && ((*jumpable)->diff==diff); jumpable--); jumpable++;
				for (; (jumpable<lookupD+N) && ((*jumpable)->diff==diff); jumpable++) {
					if (!(*jumpable)->accessible) {
						(*jumpable)->accessible=true;
						*(stackPtr++)=*jumpable-pebbles;
					}
				}
			}
			jumpable=bsS(lookupS, lookupS+N, sum);
			if (jumpable) {
				for (; (jumpable>=lookupS) && ((*jumpable)->sum==sum); jumpable--); jumpable++;
				for (; (jumpable<lookupS+N) && ((*jumpable)->sum==sum); jumpable++) {
					if (!(*jumpable)->accessible) {
						(*jumpable)->accessible=true;
						*(stackPtr++)=*jumpable-pebbles;
					}
				}
			}
		}

		printf("%d\n", farest);
	}
	return 0;
}