DBG = !true
n = gets.to_i
a = []
for i in 0...n
  a << gets.to_i
end
if DBG
  puts "n #{n} a: #{a}"
end

def lossev(x)
  return (x==0 ? 2 : x%2 == 0 ? 0 : 1)
end

def lossod(x)
  return (x%2 == 1 ? 0 : 1)
end

lz = Array.new(n,0)
le = Array.new(n,0)
od = Array.new(n,0)
re = Array.new(n,0)
rz = Array.new(n,0)
lz[0] = a[0]
le[0] = lossev(a[0])
od[0] = lossod(a[0])
re[0] = lossev(a[0])
rz[0] = a[0]
for i in 1...n
  lz[i] = lz[i-1] + a[i]
  le[i] = [lz[i-1], le[i-1]].min + lossev(a[i])
  od[i] = [lz[i-1], le[i-1], od[i-1]].min + lossod(a[i])
  re[i] = [lz[i-1], le[i-1], od[i-1], re[i-1]].min +
            lossev(a[i])
  rz[i] = [lz[i-1], le[i-1], od[i-1], re[i-1],
             rz[i-1]].min + a[i]
end

if DBG
  print lz ; puts ""
  print le ; puts ""
  print od ; puts ""
  print re ; puts ""
  print rz ; puts ""
end

ans = [lz[n-1], le[n-1], od[n-1], re[n-1],
           rz[n-1]].min
puts "#{ans}"
