#include <iostream>
#include <stdio.h>
#include <math.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<list>

using namespace std;

#define FOR(i, a, b) for(int i=a; i<b; ++i)
#define FORD(i, a, b) for(int i=a-1; i>b; --i)

int N, d;

map<int, vector<int> > m;
char visited[1000100];
int ulozene[1000100];
queue<int> q;

int main()
{
	while(1) {
		scanf("%d", &N);
		if (N == 0) break;
		FOR(i, 0, N) {
			scanf("%d", &d);
			ulozene[i] = d;
			if (i+d < N) m[i + d].push_back(i);
			if (i-d >= 0) m[i - d].push_back(i);
		}
		memset(visited, 0, sizeof(char) * (N + 5));
		int maximum = 0;
		q.push(0);
		while (!q.empty()) {
			int id = q.front();
			q.pop();

			if (visited[id]) continue;
			visited[id] = 1;
			maximum = max(maximum, id);

			int d = ulozene[id];

			if (id+d < N){
				for(int j=0; j<(int) m[id+d].size(); j++){
					if(visited[m[id+d][j]]==0){
						q.push(m[id+d][j]);
					}
				}
			}
			if (id-d >= 0){
				for(int j=0; j<m[id-d].size(); j++){
					if(visited[m[id-d][j]]==0){
						q.push(m[id-d][j]);
					}
				}
			}

		}

		printf("%d\n", maximum);
	}

	return 0;
}