#include <cstdio>
#include <vector>
#include <cmath>
#include <iostream>
#include <stack>

int main()
{
	std::ios::sync_with_stdio(false);
	int n;
	std::vector<int> pebbles;
	pebbles.reserve(1000000);
	std::vector<int> discovered;
	discovered.reserve(1000000);

	while(scanf("%d\n", &n) == 1)
	{
		if(n == 0)
		{
			break;
		}

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


		std::vector<bool> reachable;
		reachable.reserve(n);


		discovered.clear();
		int start = n - 1;
		do {
			discovered.push_back(start);
			reachable[start] = true;

			while (!discovered.empty())
			{
				int last = discovered.back();

				//std::clog << "jump from " << last ;
				discovered.pop_back();
				for(int i = 0; i <= last - pebbles[last]; i++) {
					if (reachable[i])
					{
						continue;
					}
					//std::clog << " yto " << i << std::endl;
					if(pebbles[i] + pebbles[last] == last - i) {
						//std::clog << " yto OK " << i << std::endl;
						discovered.push_back(i);
						reachable[i] = true;
						if (i == 0) {
							goto end;
						}
					}
				}
				//std::clog << " =======================\n ";
				for(int i = pebbles[last] + last; i < n; i++) {
					if (reachable[i])
					{
						continue;
					}
					//std::clog << " xto " << i << std::endl;
					if(pebbles[i] + pebbles[last] == i - last) {
						//std::clog << " xto OK " << i << std::endl;
						discovered.push_back(i);
						reachable[i] = true;
						if (i == 0) {
							goto end;
						}
					}
				}
			}
			int i;
			//std::clog << " ============= xxxx ===========\n ";
			for (i = start - 1; i >= 0; --i) {
				if (!reachable[i]) {
					start = i;
					break;
				}
			}

			if (i == 0) {
				start = 0;
			}
		} while (start != 0);



		end: printf("%d\n", start);
	}
}