#include using namespace std; using ll = long long; int main() { int n; cin >> n; vector a(n); int s = 0; for (int i = 0; i < n; i++) { cin >> a[i]; s += a[i] == 0; } a.push_back(2); vector> p; array t = {}; for (int i = 0; i <= n; i++) { if (a[i] == 2) { if (t[0] + t[1] > 0) { p.push_back(t); t = {}; } } else { t[a[i]]++; } } int dp[5001];//0の個数がkのときの最小コスト for (int k = 0; k <= s; k++) { dp[k] = 1 << 20; } dp[0] = 0; for (const auto &t : p) { for (int k = s; k >= 0; k--) { dp[k] += t[0]; if (int k1 = k - (t[0] + t[1]); k1 >= 0) dp[k] = min(dp[k], dp[k1] + t[1]); } } int r = dp[s] / 2; if (dp[s] >= 1 << 20) r = -1; cout << r << endl; return 0; }