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

typedef unsigned long long ull;
using namespace std;

long long dfs(vector<long long> &S, vector<vector<long long>> &NL, vector<vector<long long>> &NR, long long i)
{
  long long N = S.size();
  vector<char> V(N);
  stack<long long> D;
  D.push(i);
  V[i] = true;

  while (!D.empty()) {
    long long d = D.top();
    D.pop();

    if (d - S[d] >= 0)
      for (i = 0; i < NR[d - S[d]].size(); ++i) {
        long long to = NR[d - S[d]][i];
        if (V[to])
          continue;
        D.push(to);
        V[to] = true;
      }

    if (d + S[d] < N)
      for (i = 0; i < NL[d + S[d]].size(); ++i) {
        long long to = NL[d + S[d]][i];
        if (V[to])
          continue;
        D.push(to);
        V[to] = true;
      }
  }

  for (i = N-1; i >= 0; --i)
    if (V[i]) return i;
  return -1;
}

int main() {
  ios_base::sync_with_stdio(false);
  long long N;
  cin >> N;
  while (N != 0) {
    vector<long long> S(N);
    vector<vector<long long>> NR(N);
    vector<vector<long long>> NL(N);
    for (long long i = 0; i < N; ++i)
      cin >> S[i];
    for (long long i = 0; i < N; ++i) {
      if (i - S[i] >= 0) {
        NL[i - S[i]].push_back(i);
      }
      if (i + S[i] < N) {
        NR[i + S[i]].push_back(i);
      }
    }

    cout << dfs(S, NL, NR, 0) << "\n";

    cin >> N;
  }
  return 0;
}