#include <iostream>
#include <vector>
using namespace std;

class Bod 
{
public:
  Bod (int val) 
  {
    value = val;
    taken = false;
  }
  int value;
  bool taken;
};


int recursion ( int index , vector<Bod>& vec)
{
  vec [index].taken = true;
  int max =  vec[index].value;
  if ( index == vec.size())
    return index;
  // next
  for ( int i = index + vec[index].value; i< vec.size() ; i++ )
    {
      
      if ( vec[i].taken)
	continue;
      if ( vec[i].value + vec[index].value != i - index )
	continue;
      int act = recursion(i , vec);
      if ( act > max )
	max = act;
    }
  // PRev
  for ( int i = index - vec[index].value ; i >= 0 ; i--)
    {
      if ( vec[i].taken )
	continue;
      if ( vec[i].value + vec[index].value != index - i )
	continue;
      int act = recursion ( i , vec);
      if ( act > max)
	max = act;
    }
  return max>index? max : index;
}

int main ()
{
  ios_base::sync_with_stdio(false);
  int pocet;

  while ( cin >> pocet && pocet != 0)
    {
      vector <Bod>  body;
      body.reserve(pocet);
     
      for ( int i = 0; i < pocet ; i++)
	{
	  int d;
	  cin >> d; 
	  
	  body.push_back(Bod(d));
	 
	}
      
      cout << recursion ( 0 , body) << endl;
    }

  return 0;
}