#include <stdio.h>
#include <vector>
#define pb push_back
#define REP(i, n) for(int (i)=0;(i)<(n);(i)++)
using namespace std;
#include <map>
#include <algorithm>
#define mp make_pair
#include <string.h>
vector<int> lv[1111111], pv[111111];
vector<int> nxt[1111111];
int A[1111111];
int visited[1111111];
int ans = 0;
void dfs(int v) {
	visited[v] = 1;
	ans = max(v, ans);
	for(int i = 0; i < nxt[v].size(); i++) {
		int u = nxt[v][i];
		if(u <= v) {
			for(int k = 0; k < lv[u].size(); k++) {
				int uu = lv[u][k];
				if(!visited[uu]) {
					dfs(uu);
				}
			}
		}
		if(u >= v) {
			for(int k = 0; k < pv[u].size(); k++) {
				int uu = pv[u][k];
				if(!visited[uu]) {
					dfs(uu);
				}
			}
		}
	}
}
int main() {
	int n;
	while(scanf("%d", &n) == 1) {
		if(n == 0)
			break;
		REP(i, n) { lv[i].clear(); pv[i].clear(); nxt[i].clear(); visited[i] = 0;}
		REP(i, n) scanf("%d", A+i); 
		REP(i, n) {
			int l1 = i-A[i];
			if(l1 >= 0) {
				pv[l1].pb(i);
				nxt[i].pb(l1);
			}
			
			int l2 = i+A[i];
			if(l2 < n) {
				lv[l2].pb(i);
				nxt[i].pb(l2);
			}
		}
		ans = 0;
		int curr = 0;
		dfs(0);
		printf("%d\n", ans);
	}
	return 0;
}