output_description: Print the minimum required number of operations
  
  * * *
input_description: The input is given from Standard Input in the following format:
  
      
      
      N
      p_1 p_2 .. p_N
attempt: # coding: utf-8
  import re
  import math
  from collections import defaultdict
  from collections import deque
  import collections
  from fractions import Fraction
  import itertools
  from copy import deepcopy
  import random
  import time
  import os
  import queue
  import sys
  import datetime
  from functools import lru_cache
  
  # @lru_cache(maxsize=None)
  readline = sys.stdin.readline
  sys.setrecursionlimit(2000000)
  # import numpy as np
  alphabet = "abcdefghijklmnopqrstuvwxyz"
  mod = int(10**9 + 7)
  inf = int(10**20)
  
  
  def yn(b):
      if b:
          print("yes")
      else:
          print("no")
  
  
  def Yn(b):
      if b:
          print("Yes")
      else:
          print("No")
  
  
  def YN(b):
      if b:
          print("YES")
      else:
          print("NO")
  
  
  class union_find:
      def __init__(self, n):
          self.n = n
          self.P = [a for a in range(n)]
          self.rank = [0] * n
  
      def find(self, x):
          if x != self.P[x]:
              self.P[x] = self.find(self.P[x])
          return self.P[x]
  
      def same(self, x, y):
          return self.find(x) == self.find(y)
  
      def link(self, x, y):
          if self.rank[x] < self.rank[y]:
              self.P[x] = y
          elif self.rank[y] < self.rank[x]:
              self.P[y] = x
          else:
              self.P[x] = y
              self.rank[y] += 1
  
      def unite(self, x, y):
          self.link(self.find(x), self.find(y))
  
      def size(self):
          S = set()
          for a in range(self.n):
              S.add(self.find(a))
          return len(S)
  
  
  def ispow(a, b):  # aはbの累乗数か
      now = b
      while now < a:
          now *= b
      if now == a:
          return True
      else:
          return False
  
  
  def getbin(num, size):
      A = [0] * size
      for a in range(size):
          if (num >> (size - a - 1)) & 1 == 1:
              A[a] = 1
          else:
              A[a] = 0
      return A
  
  
  def getfacs(n, mod_=0):
      A = [1] * (n + 1)
      for a in range(2, len(A)):
          A[a] = A[a - 1] * a
          if mod_ > 0:
              A[a] %= mod_
      return A
  
  
  def comb(n, r, mod, fac):
      if n - r < 0:
          return 0
      return (fac[n] * pow(fac[n - r], mod - 2, mod) * pow(fac[r], mod - 2, mod)) % mod
  
  
  def nextcomb(num, size):
      x = num & (-num)
      y = num + x
      z = num & (~y)
      z //= x
      z = z >> 1
      num = y | z
      if num >= (1 << size):
          return False
      else:
          return num
  
  
  def getprimes(n, type="int"):
      if n == 0:
          if type == "int":
              return []
          else:
              return [False]
      A = [True] * (n + 1)
      A[0] = False
      A[1] = False
      for a in range(2, n + 1):
          if A[a]:
              for b in range(a * 2, n + 1, a):
                  A[b] = False
      if type == "bool":
          return A
      B = []
      for a in range(n + 1):
          if A[a]:
              B.append(a)
      return B
  
  
  def isprime(num):
      if num <= 1:
          return False
      i = 2
      while i * i <= num:
          if num % i == 0:
              return False
          i += 1
      return True
  
  
  def ifelse(a, b, c):
      if a:
          return b
      else:
          return c
  
  
  def join(A, c=""):
      n = len(A)
      A = list(map(str, A))
      s = ""
      for a in range(n):
          s += A[a]
          if a < n - 1:
              s += c
      return s
  
  
  def factorize(n, type_="dict"):
      b = 2
      list_ = []
      while b * b <= n:
          while n % b == 0:
              n //= b
              list_.append(b)
          b += 1
      if n > 1:
          list_.append(n)
      if type_ == "dict":
          dic = {}
          for a in list_:
              if a in dic:
                  dic[a] += 1
              else:
                  dic[a] = 1
          return dic
      elif type_ == "list":
          return list_
      else:
          return None
  
  
  def pm(x):
      return x // abs(x)
  
  
  def inputintlist():
      return list(map(int, input().split()))
  
  
  ######################################################################################################
  
  n = int(input())
  P = inputintlist()
  P = list(map(lambda x: x - 1, P))
  B = []
  for a in range(n):
      B.append(not P[a] == a)
  B.append(True)
  ans = 0
  for a in range(n - 1):
      if B[a] == False:
          if B[a + 1] == False:
              B[a] = True
              B[a + 1] = True
          else:
              B[a] = True
          ans += 1
  
  print(ans)
  
problem_description: Statement
  
  You are given a permutation p_1,p_2,...,p_N consisting of 1,2,..,N. You can
  perform the following operation any number of times (possibly zero):
  
  Operation: Swap two **adjacent** elements in the permutation.
  
  You want to have p_i ≠ i for all 1≤i≤N. Find the minimum required number of
  operations to achieve this.
samples: [{"input": "5\n    1 4 3 5 2", "output": "2\n    \n\nSwap 1 and 4, then swap 1 and 3. p is now 4,3,1,5,2 and satisfies the\ncondition. This is the minimum possible number, so the answer is 2.\n\n* * *"}, {"input": "2\n    1 2", "output": "1\n    \n\nSwapping 1 and 2 satisfies the condition.\n\n* * *"}, {"input": "2\n    2 1", "output": "0\n    \n\nThe condition is already satisfied initially.\n\n* * *"}, {"input": "9\n    1 2 4 9 5 8 7 3 6", "output": "3"}]