#include <list>
#include <vector>
#include <iostream>
#include <map>
#include <cstdint>
#include <queue>

//#define jump
#ifndef jump

int main(){

    std::ios_base::sync_with_stdio(false);
    std::map<int, std::list<int>> prihradka;
    std::vector<int> stones;

    std::vector<std::vector<int>> links;

    int T;
    while  (std::cin >> T && T != 0){
        stones.clear();
        stones.reserve(T);

        prihradka.clear();

        links.clear();
        links.resize(T);

        int temp;
        for (int t = 0; t < T; ++t){
            std::cin >> temp;
            stones.push_back(temp);
        }

        for (int i = 1; i < T; ++i){
            auto diff = stones[0] + stones[i] - i;
            prihradka[diff].push_back(i);
        }

        for (auto target : prihradka[0]){
            links[0].push_back(target);
            links[target].push_back(0);
        }

        int diff = 0;
        for (int i = 1; i < T; ++i){
            diff--;
            diff += stones[i-1] - stones[i];
            // nezavisi na poradi
            prihradka[stones[0] + stones[i] - i].pop_front();
            for (auto target: prihradka[diff]){
                links[i].push_back(target);
                links[target].push_back(i);
            }
        }

        std::vector<uint8_t> visited(T);
        std::queue<int> queue;
        queue.push(0);
        int maxIndex = 0;
        while (!queue.empty()){
            int current = queue.front(); queue.pop();
            if (visited[current]){
                continue;
            }
            visited[current] = 1;

            maxIndex = std::max(current, maxIndex);

            for (auto i : links[current]){
                queue.push(i);
            }
        }

        std::cout << maxIndex << '\n';

    }

}


#endif