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

int main(void){

string line;
int i, noP;
int *pebbles;
bool *available;
int open;
int pointer;
//vector<int> opened = vector<int>();
int *opened;
int max;
int absi;
pebbles = new int[1000000];
available = new bool[1000000];
opened= new int[1000000];

while(true){
    max=0;
    cin>>noP;
    if(!noP)
        return 0;
    pointer=0;
    for(i=0; i<noP; i++){
        cin>>pebbles[i];
        available[i]=false;
        if(pebbles[i]>max)
            max=pebbles[i];
    }
    opened[++pointer]=0;
    available[0]=true;
    while(pointer){
        open=opened[pointer--];
        i=max+pebbles[open];
        if((open+i)<noP)
            i=noP-open-1;
        //for(; i<=max+pebbles[open] && (open+i)<noP; i++){ //i=pebbles[open]
        for(;(open+i>=0) && (i>=(-max-pebbles[open])); i--){ //i=pebbles[open]
            if(i<0)
                absi=-i;
             else
                absi=i;
            if(pebbles[open]+pebbles[open+i]==absi && !available[open+i]){
                available[open+i]=true;
                opened[++pointer]=(open+i);
                if(open+i+1==noP)
                    pointer=0;
                }
        }
    }
//    for(i=0; i<noP; i++)
  //      cout<<available[i];
    //cout<<endl;
    for(i=noP-1; !available[i] && i>0; i--);
    cout<<i<<endl;
}

delete[] pebbles;
delete[] available;
return 0;}