#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <climits>

using namespace std;

typedef long long ll;
typedef pair<int,int> ii;

int main() {
	ll n,i,j,k;
	while(cin >> n && n > 0){
		ll pole[n];
		for(i=0;i<n;i++){
			cin >> pole[i];
		}
		vector<vector<ll> > lavych(n);
		vector<vector<ll> > pravych(n);
		
		for(i=0;i<n;i++){
			if(i - pole[i] >= 0) pravych[i-pole[i]].push_back(i);
			if(i + pole[i] < n) lavych[i+pole[i]].push_back(i);
		}

		
		vector<vector<ll> > graf(n);
		
		for(i=0;i<n;i++){
			for(j = 0; j < lavych[i].size(); j++){
				for(k=0; k < pravych[i].size(); k++){
					graf[j].push_back(pravych[i][k]);
					//
					//cout << j << " " << k << endl;
				}
			}
		}
		
		queue<ll> q;
		q.push(0);
		vector<bool> ci(n,0);
		ci[0] = true;
		
		while(!q.empty()){
			ll x = q.front();
			q.pop();
			
			for(i = 0; i < graf[x].size(); i++){
				if(!ci[graf[x][i]]) {
					q.push(graf[x][i]);
					ci[graf[x][i]] = true;
				}
			}
		}
		ll max = 0;
		for(i = 0; i< n;i++){
			if(ci[i]) max = i;
		}
		
		cout << max << "\n";

		
	}
}