#include using namespace std; const int INF = 10000000; int main(){ int N; cin >> N; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector cnt0(1, 0), cnt1(1, 0); int s0 = 0; int cnt = 1; for (int i = 0; i < N; i++){ if (A[i] == 0){ cnt0.back()++; s0++; } if (A[i] == 1){ cnt1.back()++; } if (A[i] == 2){ cnt0.push_back(0); cnt1.push_back(0); cnt++; } } vector> dp(cnt + 1, vector(s0 + 1, INF)); dp[0][0] = 0; for (int i = 0; i < cnt; i++){ for (int j = 0; j <= s0; j++){ if (j + cnt0[i] + cnt1[i] <= s0){ dp[i + 1][j + cnt0[i] + cnt1[i]] = min(dp[i + 1][j + cnt0[i] + cnt1[i]], dp[i][j] + cnt1[i]); } dp[i + 1][j] = min(dp[i + 1][j], dp[i][j]); } } if (dp[cnt][s0] == INF){ cout << -1 << endl; } else { cout << dp[cnt][s0] << endl; } }