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

typedef pair<int, int> step; // masu, turn

int main() {
  int N;
  cin >> N;
  vector<int> masu = vector<int>(N);
  for (auto i=0; i<N; i++) {
    cin >> masu[i];
  }
  vector<bool> checked = vector<bool>(N, false);
  vector<int> node = vector<int>(N);
  for (auto i=0; i<N; i++) {
    if (!checked[i]) {
      vector<int> V;
      vector<bool> B = vector<bool>(N, false);
      int cur = i;
      while(true) {
	if (B[cur]) { // 無限ループに突入した場合棄却
	  V.push_back(cur);
	  node[cur] = -1;
	  break;
	}
	B[cur] = true;
	V.push_back(cur);
	if (checked[cur]) {  // 過去調べたものと合流
	  break;
	}
	if (masu[cur] == 0) { // ストップの場合
	  node[cur] = cur;
	  break;
	}
	cur += masu[cur];
      }
      for (auto j=0; j<V.size(); j++) {
	checked[V[j]] = true;
	node[V[j]] = node[V[V.size()-1]];
	// cerr << V[j] << " to " << node[V[j]] << endl;
      }
    }
  }
  queue<step> Q;
  Q.push(make_pair(0 ,0));
  vector<bool> visited = vector<bool>(N, false);
  while (!Q.empty()) {
    int m = Q.front().first;
    int t = Q.front().second;
    Q.pop();
    if (m == N-1) {
      cout << t << endl;
      return 0;
    }
    if (!visited[m]) {
      visited[m] = true;
      for (auto i=1; i<=6; i++) {
	int cur_m;
	if ((cur_m = node[m+i]) < N && cur_m >= 0 && !visited[cur_m]) {
	    Q.push(make_pair(cur_m, t+1));
	}
      }
    }
  }
}