3
-1 1 -1
 4
45 -1 41 -1
 1
-1
 5
40 -1 44 46 48
 6
43 40 37 34 -1 -1
 7
-1 2 4 -1 4 1 5
 19
23 26 -1 -1 35 38 41 -1 -1 -1 53 -1 59 62 6 7 8 9 -1
 6
-1 2 6 -1 -1 6
 16
3 8 13 18 23 -1 -1 -1 43 48 53 45 -1 -1 -1 -1
 13
25 24 23 22 24 27 -1 33 -1 2 2 2 -1
 12
-1 17 -1 54 -1 64 -1 74 79 84 -1 94
 8
-1 12 14 16 18 20 -1 -1
 13
2 -1 3 1 3 1 -1 1 3 -1 -1 1 1
 5
-1 40 42 -1 46
 2
1000000000 -1
 14
-1 5 3 -1 -1 31 31 31 -1 31 -1 -1 4 7
 3
-1 1000000000 999999999
 7
32 33 34 -1 -1 37 38
 1
1000000000
 10
29 27 -1 23 42 -1 -1 45 -1 -1
 3
39 42 -1
 15
-1 28 -1 32 34 26 -1 26 -1 -1 26 26 26 -1 -1
 3
1000000000 999999999 1000000000
 17
-1 -1 -1 -1 64 68 72 -1 45 46 47 48 49 50 51 52 53
 3
-1 1 1000000000
 2
-1 1000000000
 3
999999999 -1 1000000000
 1
1
 2
1000000000 1000000000
 3
999999999 1000000000 -1
 7
11 8 5 -1 -1 -1 -1
 3
-1 1 2
 2
-1 21
 8
-1 -1 1 7 -1 9 5 2
 11
9 21 17 13 -1 -1 -1 -1 -1 -1 -1
 3
-1 1000000000 -1
 6
-1 6 1 -1 -1 -1
 1
65
 20
-1 32 37 -1 -1 -1 57 -1 -1 40 31 33 -1 -1 39 47 43 -1 35 32
 5
-1 1 7 -1 5
 18
21 19 -1 -1 -1 48 50 -1 54 -1 5 1 -1 -1 -1 37 36 35
 9
42 39 36 33 -1 -1 -1 34 39
 2
-1 -1

1
 1
 1
 1
 1
 3
 2
 2
 2
 3
 2
 1
 6
 1
 1
 3
 1
 1
 1
 2
 1
 2
 2
 2
 2
 1
 2
 1
 1
 1
 2
 2
 1
 3
 3
 1
 2
 1
 5
 2
 4
 2
 1

import java.util.*;
import java.io.*;

public class Main{

  BufferedReader in;
  StringTokenizer str = null;
  PrintWriter out;

  private String next() throws Exception{
    while(str == null || !str.hasMoreElements())
      str = new StringTokenizer(in.readLine());
    return str.nextToken();
  }

  private int nextInt() throws Exception{
    return Integer.parseInt(next());
  }

  final static long oo = Long.MAX_VALUE/2;

  public void run() throws Exception{
    in = new BufferedReader(new InputStreamReader(System.in)); 
    out = new PrintWriter(System.out);
    int n = nextInt();
    long []a = new long[n];
    for(int i=0;i<n;i++){
      a[i] = nextInt();
    }

    Info[][] f= new Info[n][2];
    for(int i=0;i<n;i++){
      for(int j=0;j<2;j++){
        f[i][j] = new Info(oo, oo, oo, oo);
      }
    }
    if (a[0] == -1) a[0] = oo;
    f[0][0] = new Info(a[0], oo, 1, 1);
    f[0][1] = new Info(a[0], oo, 1, 1);

    for(int i=1;i<n;i++){
      if (a[i] != -1){
        f[i][0].a = a[i];
        f[i][0].f = Math.min(f[i-1][0].f, f[i-1][1].f) + 1;
        f[i][0].len = 1;
        f[i][0].d = oo;

        long d = f[i-1][1].d;
        long a0 = f[i-1][1].a;
        long len = f[i-1][1].len;
        int v = f[i-1][1].i;

        if (d == oo){
          if (a0 == oo){
            f[i][1].a = a[i];
            f[i][1].len = len+1;
            f[i][1].d = oo;  
            f[i][1].f = f[i-1][1].f;
            f[i][1].i = (int)len+1;
            /*
            if (a[i] > len) {
              f[i][1].a = a[i];
              f[i][1].len = len+1;
              f[i][1].d = oo;  
              f[i][1].f = f[i-1][1].f;
              f[i][1].i = (int)len+1;
            }else if (a[i] == len){
              f[i][1].a = a[i];
              f[i][1].len = len+1;
              f[i][1].d = 0;  
              f[i][1].f = f[i-1][1].f;
              f[i][1].i = (int)len+1;
            }
            */
          }else{
            if (len == 1){
              f[i][1].a = a0;
              f[i][1].len = f[i-1][1].len + 1;
              f[i][1].d = a[i] - a0;
              f[i][1].f = f[i-1][1].f;
            }else{
              if ((a[i] - a0) % (len-v+1) == 0) {
                long td = (a[i] - a0)/(len-v+1);
                if (a0 - td * (v-1) > 0){
                  f[i][1].a = a0 - td * (v-1);
                  f[i][1].len = f[i-1][1].len + 1;
                  f[i][1].d = td;
                  f[i][1].f = f[i-1][1].f;  
                  f[i][1].i = 1;
                }
              }
            }
          }
        }else{
          if (a[i] == a0 + d * len){
            f[i][1].a = a0;
            f[i][1].len = f[i-1][1].len + 1;
            f[i][1].d = d;
            f[i][1].f = f[i-1][1].f;
          }
        }
      }else{
        f[i][0].a = oo;
        f[i][0].d = oo;
        f[i][0].len = 1;
        f[i][0].f = Math.min(f[i-1][0].f, f[i-1][1].f) + 1;
        
        long d = f[i-1][1].d;
        long a0 = f[i-1][1].a;
        long len = f[i-1][1].len;
        if (d == oo){
          f[i][1].d = oo;
          f[i][1].a = a0;
          f[i][1].len = len + 1;
          f[i][1].f = f[i-1][1].f;
          f[i][1].i = f[i-1][1].i;
        }else{
          f[i][1].d = d;
          f[i][1].a = a0;
          f[i][1].len = len + 1;
          f[i][1].f = f[i-1][1].f;
          f[i][1].i = f[i-1][1].i;
        }
      }

      if (f[i][1].f == oo){
        f[i][1] = new Info(f[i][0]);
      }
    }
    /*
    for(int i=0;i<n;i++){
      for(int j=0;j<2;j++){
        System.out.println(i + " " + j + " " + f[i][j]);
      }
    }
    */
    long ret = Math.min(f[n-1][0].f, f[n-1][1].f);
    out.println(ret);
    out.close();
  }

  static class Info{
    long f, d, a, len;
    int i;
    public Info(long a, long d, long len, long f){
      this.a = a;
      this.d = d;
      this.len = len;
      this.f = f;
      this.i = 1;
    }

    public Info(Info i){
      this.a = i.a;
      this.d = i.d;
      this.len = i.len;
      this.f = i.f;
      this.i = i.i;  
    }

    public String toString(){
      return "a=" + a + " d=" + d + " len=" + len + " f=" + f + " i=" + i;
    }
  }
 
  public static void main(String args[]) throws Exception{
    new Main().run();  
  }
}