Hands that shed innocent blood!

There are *n* guilty people in a line, the *i*-th of them holds a claw with length *L*<sub class="lower-index">*i*</sub>. The bell rings and every person kills some of people in front of him. All people kill others at the same time. Namely, the *i*-th person kills the *j*-th person if and only if *j* &lt; *i* and *j* ≥ *i* - *L*<sub class="lower-index">*i*</sub>.

You are given lengths of the claws. You need to find the total number of alive people after the bell rings.
The first line contains one integer *n* (1 ≤ *n* ≤ 10<sup class="upper-index">6</sup>) — the number of guilty people.

Second line contains *n* space-separated integers *L*<sub class="lower-index">1</sub>, *L*<sub class="lower-index">2</sub>, ..., *L*<sub class="lower-index">*n*</sub> (0 ≤ *L*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">9</sup>), where *L*<sub class="lower-index">*i*</sub> is the length of the *i*-th person's claw.
In first sample the last person kills everyone in front of him.
4
0 1 0 10
1
2
0 0
2
10
1 1 3 0 0 0 2 1 0 3
3
10
0 0 2 0 0 3 3 2 2 0
2
1
0
1
5
0 0 0 1 0
4
6
3 1 1 0 3 3
1
8
0 0 0 1 0 0 1 2
5
1
1000000000
1
2
1 3
1
2
1000000000 1000000000
1
11
1 0 0 1 1 3 2 0 0 2 3
4
1
1
1
//
//  main.cpp
//  cf b
//
//  Created by Артем Стрельцов on 17.11.17.
//  Copyright © 2017 Артем Стрельцов. All rights reserved.
//

#include <bits/stdc++.h>

#define int long long
#define mp(x, y) make_pair(x, y)
#define fs first
#define sc second
#define pb(x) push_back(x)
#define sz(x) (int)x.size()
#define len(x) (int)x.length()
#define forn(i, a, b) for (int  i = a; i < b; ++i)

typedef long long ll;

using namespace std;

struct tree {
    
    vector<int> t;
    vector<int> p;
    
    tree(int n) {
        t.resize(4 * n, 0);
        p.resize(4 * n, 0);
    }
    
    void push(int v, int l, int r) {
        t[v] += p[v];
        if (r != l) {
            p[v * 2 + 1] += p[v];
            p[v * 2 + 2] += p[v];
        }
        p[v] = 0;
    }
    
    void update(int i, int l, int r, int a, int b, int val) {
        push(i, l, r);
        if (r < a || l > b)
            return;
        if (l >= a && r <= b) {
            p[i] += val;
            push(i, l, r);
            return;
        }
        push(i, l, r);
        int m = (l + r) / 2;
        update(2 * i + 1, l, m, a, b, val);
        update(2 * i + 2, m + 1, r, a, b, val);
        t[i] = t[i * 2 + 1] + t[i * 2 + 2];
    }
    
    
    int getmax(int i, int l, int r, int a, int b) {
        push(i, l, r);
        if (r < a || l > b)
            return 0;
        push(i, l, r);
        if (a <= l && r <= b)
            return t[i];
        int m = (l + r) / 2;
        return min(getmax(i * 2 + 1, l, m, a, b) + getmax(i * 2 + 2, m + 1, r, a, b), r - l);
    }
    
};

signed main() {
    
    int  n;
    cin >> n;
    vector<int> a(n);
    forn(i, 0, n)
        cin >> a[i];

    int mx = 0;
    int ans = 0;
    for(int i = n - 1; i > -1; --i){
        if(mx <= 0) ++ans;
        mx = max(mx, a[i] + 1) - 1;
    }
    cout << ans; //n - t.getmax(0, 0, n - 1, 0, n - 1) << endl;
    
}