package main

import (
    "fmt"
)

/* 
    优先在铭文右侧放能量水晶
    再考虑
    如果出现至少3个符文相连的情况,则无法全部激活
 */
func main() {
    var n int
    fmt.Scanf("%d", &n)
    var k = make([]int, n)
    for i := 0;i<n;i++{
        fmt.Scanf("%d", &k[i])
    }
    var success bool = true
    var sum int = 0
    for i:=0;i<n;i++ {
        if k[i] == 1{
            if i+1 < n && k[i+1] == 0 { // 只考虑右侧,因为从左到右遍历
                k[i+1] = 2
                sum++
                i+=2
            }else if i+1 < n && k[i+1] == 1 && i-1 >= 0 &&  k[i-1]==1{
                // 两边都有符文,无法全部激活
                success = false
                break
            }else if i+1 < n && k[i+1] == 1 && i-1 >= 0 &&  k[i-1]==0{
                // 左空,右铭文
                k[i-1] = 2
                sum++
            }else if i+1 < n && k[i+1] == 0 && i-1 >= 0 &&  k[i-1]==1{
                // 左铭文,右空
                k[i+1] = 2
                sum++
            }
        }
    }
    // 判断最后两个
    if n > 2 {
        if k[n-2] == 1 && k[n-1]==1{
            success = false
        }
        if k[n-2] == 0 && k[n-1]==1{
            k[n-2] =2
            sum++
        }
    }

    if success {
        fmt.Println(sum)
    } else {
        fmt.Println(-1)
    }
}