#include <iostream>
#include <iomanip>
#include <vector>
#include <limits>
#include <algorithm>
#include <cctype>
#include <cmath>
#include <queue>
#include <set>
#include <bitset>
#include <map>
#include <cstdlib>
#include <cstring>
#include <sstream>

#define REP(i, n) for(int i=0;i<(n);++i)
#define REPE(i, n) for(int i=0;i<=(n);++i) 
#define REPA(i, a, b) for(int i=(a);i<(b);++i)
#define REPAE(i, a, b) for(int i=(a);i<=(b);++i) 

using namespace std;

typedef unsigned long long int ULINT;
typedef long long int LINT;
typedef pair<int,int> PPI;

int n;

vector<int> neighbours[1000007];
vector<int> leftdp[1000007];
vector<int> rightdp[1000007];
int nums[1000007];
bool closed[1000007];

int lemax = 0;

int dfs(int node) {
	closed[node] = true;

	if(node > lemax) lemax = node;

	for(int neigh : neighbours[node]) {
		if(closed[neigh]) continue;
		dfs(neigh);
	}
	
}

bool process() {
	cin >> n;
	if(n == 0) return false;
	
	REP(i, n) {
		neighbours[i].clear();
		leftdp[i].clear();
		rightdp[i].clear();		
	}
	
	
	
	REP(i, n) cin >> nums[i];
	
	for(int i = 0; i < n; ++i) {
		if(i+nums[i] < n)
		rightdp[i+nums[i]].push_back(i);
		if(i-nums[i] >= 0)
		leftdp[i-nums[i]].push_back(i);
	}
	
	for(int i = 0; i < n; ++i) {
		if(rightdp[i].size() && leftdp[i].size())
			for(int n1 : rightdp[i])
				for(int n2 : leftdp[i]) {
					neighbours[n1].push_back(n2);
					neighbours[n2].push_back(n1);
				}
	}

	
	memset(closed, false, sizeof(closed));
	lemax = 0;
	dfs(0);
	cout << lemax  << endl;	
	


	return true;
}

int main() {

	while(process());

	return 0;
}