#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <fstream>
#include<stdlib.h>

#define rep( i, l, r ) for (int i = l; i <= r; i++)
#define down( i, l, r ) for (int i = l; i >= r; i--)

using namespace std;

int n, num[10009], ans, now[10009];

void Seache(int w)
{
	if (w == 1)
	{
		if (num[1] == 2) 
		{
			now[1] = now[2] = 1; Seache(2); 
		}
		else if (num[1] == 0) 
		{
			now[1] = now[2] = 0; Seache(2); 
		}
		else
		{
			now[1] = 1; now[2] = 0; Seache(2); 
			now[1] = 0; now[2] = 1; Seache(2); 
		}
	}
	else if (w == n) 
	{
		if (num[w] == now[w-1] + now[w]) ans++;
	}
	else 
	{
		int a = num[w] - now[w-1] - now[w];
		if (a == 0)
		{
			now[w+1] = 0; Seache(w+1);
		}
		else if (a == 1)
		{
			now[w+1] = 1; Seache(w+1);
		}
	}
}

int main()
{
	scanf("%d", &n);
	rep(i, 1, n) scanf("%d", &num[i]);
	ans = 0;
	rep(i, 1, n) if (num[i] > 3 || num[i] < 0) ans = -1;
	if (num[1] > 2 || num[n] > 2) ans = -1; 
	rep(i, 2, n) if (num[i-1] - num[i] < -1 || num[i-1] - num[i] > 1) ans = -1;
	if (ans != -1) Seache(1); else ans = 0;
	printf("%d", ans);
	return 0;
}
