#include #include #include #include #include #include #include using namespace std; using ll = long long; #define REP(i, n) for(ll i=0; i<(n);i++) #define VL vector std::random_device seed_gen; std::default_random_engine eg(seed_gen()); int main() { ll n; cin >> n; VL a(n); REP(i, n) cin >> a[i]; VL z, o; ll zc = 0, oc = 0; z.push_back(0); o.push_back(0); REP(i, n) { if (a[i] == 2) { z.push_back(0); o.push_back(0); } else if (a[i]) { o.back()++; oc++; } else { z.back()++; zc++; } } vector dp(z.size() + 1, vector(zc + oc + 1, 1e18)); dp[0][zc] = 0; REP(i, z.size()) { REP(j, zc+oc+1) { if (j + o[i] < zc + oc + 1) { dp[i + 1][j + o[i]] = min(dp[i + 1][j + o[i]], dp[i][j] + z[i]); } if (j - z[i] >= 0) { dp[i + 1][j - z[i]] = min(dp[i + 1][j - z[i]], dp[i][j] + o[i]); } } } if (dp[z.size()][oc] > 1e17) { cout << -1; } else { cout << dp[z.size()][oc] / 2; } return 0; }