#include using namespace std; constexpr int inf = 1001001001; int dp[5005][10005]; int main() { int N; cin >> N; for(int i = 0; i <= N; i++) { for(int j = 0; j <= N; j++) { dp[i][j] = inf; } } int sum = 0; vectorA(N); pairx; vector>tmp; for(int i = 0; i < N; i++) { cin >> A[i]; if(A[i] == 2) { tmp.push_back(x); x = {0,0}; } else if(A[i] == 0) { x.first++; sum++; } else { x.second++; } } tmp.push_back(x); dp[0][0] = 0; for(int i = 0; i < tmp.size(); i++) { for(int j = 0; j <= N; j++) { dp[i+1][j] = min(dp[i+1][j],dp[i][j]+tmp[i].first); dp[i+1][j+tmp[i].first+tmp[i].second] = min(dp[i+1][j+tmp[i].first+tmp[i].second],dp[i][j]+tmp[i].second); } } if(dp[tmp.size()][sum] == inf) { cout << -1 << endl; } else { cout << dp[tmp.size()][sum]/2 << endl; } }