#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<queue>

using namespace std;

int main()
{
	while(1)
	{
		int n, i, j ,k, l;
		scanf("%d\n", &n);
		int arr[n];
		int vis[n];
		for (i = 0; i < n; i++) {arr[i] = 0;vis[i] = 0;}
		if (n == 0) break;

		for(i = 0; i < n; i++)
		{
			scanf("%d", &arr[i]);
		}

		int minleft[n], maxleft[n], minright[n], maxright[n];
		minleft[0] = arr[0];
		maxleft[0] = arr[0];
		minright[n-1] = arr[n-1];
		maxright[n-1] = arr[n-1];

		for(i = 1; i < n; i++)
		{
			k = n - 1 - i;
			minleft[i] = min(minleft[i-1], arr[i]);
			maxleft[i] = max(maxleft[i-1], arr[i]);
			minright[k] = min(minright[k+1], arr[k]);
			maxright[k] = max(maxright[k+1], arr[k]);
		}

		/*
		for(i = 0; i < n; i++)
		{
			printf("%d ", arr[i]);			
		}
		printf("\n");

		for(i = 0; i < n; i++)
		{
			printf("%d ", minleft[i]);			
		}
		printf("\n");

		for(i = 0; i < n; i++)
		{
			printf("%d ", maxleft[i]);			
		}
		printf("\n");

		for(i = 0; i < n; i++)
		{
			printf("%d ", minright[i]);			
		}
		printf("\n");

		for(i = 0; i < n; i++)
		{
			printf("%d ", maxright[i]);			
		}
		printf("\n\n\n");
		*/

		queue<int> q;
		

		q.push(0);
		vis[0] = 1;
		int maxi = 0;

		while(q.size() > 0)
		{
			int poped = q.front();
			q.pop();

			if (poped > maxi) maxi = poped;
			int endlimit = min(arr[poped] + poped + maxright[poped], n);
			for (j = arr[poped] + poped + minright[poped]; j <= endlimit; j++)
			{
				if (arr[j] + arr[poped] == j - poped && vis[j] == 0)
				{
					q.push(j);
					vis[j] = 1;
					/*printf("pushedA: %d\n", j);*/
				}
			}
			int qq = (poped - (arr[poped] + maxleft[poped]));
			endlimit = max(qq, 0);
			for (j = poped - (arr[poped] + minleft[poped]); j >= endlimit; j--)
			{
				if (arr[j] + arr[poped] == poped - j && vis[j] == 0)
				{
					q.push(j);
					vis[j] = 1;
					/*printf("pushedB: %d\n", j);*/
				}
			}
		}

		printf("%d\n", maxi);

	}
	return 0;
}