Hands that shed innocent blood!

There are n guilty people in a line, the i-th of them holds a claw with length Li. 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 < i and j ≥ i - Li.

You are given lengths of the claws. You need to find the total number of alive people after the bell rings.

Input

The first line contains one integer n (1 ≤ n ≤ 106) — the number of guilty people.

Second line contains n space-separated integers L1, L2, ..., Ln (0 ≤ Li ≤ 109), where Li is the length of the i-th person's claw.

Output

Print one integer — the total number of alive people after the bell rings.

Examples

Input

4
0 1 0 10


Output

1


Input

2
0 0


Output

2


Input

10
1 1 3 0 0 0 2 1 0 3


Output

3

Note

In first sample the last person kills everyone in front of him.
import java.util.Scanner;

public class Main {

	public static void main(String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] bit1 = constructBITree(n);
		int[] bit2 = constructBITree(n);
		
		int[] arr = new int[n];
		for(int i=0;i<n;i++)
			arr[i] = sc.nextInt();
		
		updateRange(bit1,bit2,n,1,0,n-1);
		
		for(int i=0;i<n;i++)
		{
			if(arr[i]==0) continue;
			int l = Math.max(0,i-arr[i]);
			int r = Math.max(0,i-1);
			
			if(i>=l && i<=r) continue;
			
			updateRange(bit1,bit2,n,-1,l,r);
		}
		int sum = 0;
		for(int i=0;i<n;i++)
		{
			int val = rangeSum(i,i,bit1,bit2);
			if(val>0) sum++;
		}
		System.out.println(sum);
	}

static int getSum(int BITree[], int index) 
{ 
    int sum = 0;
  
    index = index + 1; 
  
    while (index > 0) 
    { 
        sum += BITree[index]; 
  
        index -= index & (-index); 
    } 
    return sum; 
} 
  
static void updateBIT(int BITree[], int n, int index, int val) 
{ 
    index = index + 1; 
  
    while (index <= n) 
    { 
        BITree[index] += val; 
  
        index += index & (-index); 
    } 
}
static int sum(int x, int BITTree1[], int BITTree2[]) 
{ 
    return (getSum(BITTree1, x) * x) - getSum(BITTree2, x); 
} 
  
  
static void updateRange(int BITTree1[], int BITTree2[], int n, 
                int val, int l, int r) 
{ 
    updateBIT(BITTree1, n, l, val); 
    updateBIT(BITTree1, n, r + 1, -val); 
  
    updateBIT(BITTree2, n, l, val * (l - 1)); 
    updateBIT(BITTree2, n, r + 1, -val * r); 
} 
  
static int rangeSum(int l, int r, int BITTree1[], int BITTree2[]) 
{ 
    return sum(r, BITTree1, BITTree2) - 
        sum(l - 1, BITTree1, BITTree2); 
} 
  
  
static int[] constructBITree(int n) 
{ 
    int []BITree = new int[n + 1]; 
    for (int i = 1; i <= n; i++) 
        BITree[i] = 0; 
  
    return BITree; 
}
}
 			 		 	  	   			      	 		 	