n = int(input()) A = list(map(int, input().split())) pos = [i for i in range(n) if A[i] != 2] n0 = A.count(0) n1 = A.count(1) if not pos: print(0) exit() groups = [] current_group = [pos[0]] for p in pos[1:]: if p == current_group[-1] + 1: current_group.append(p) else: groups.append(current_group) current_group = [p] groups.append(current_group) group_info = [] for group in groups: cnt0 = 0 cnt1 = 0 for idx in group: if A[idx] == 0: cnt0 += 1 else: cnt1 += 1 group_len = len(group) group_info.append((group_len, cnt1, cnt0)) # cost0 is cnt1, cost1 is cnt0 target_sum = n0 current_dp = {0: 0} for glen, cost0, cost1 in group_info: new_dp = {} for s in current_dp: current_cost = current_dp[s] # Option 1: assign to 0 new_s = s + glen if new_s <= target_sum: if new_s in new_dp: if current_cost + cost0 < new_dp[new_s]: new_dp[new_s] = current_cost + cost0 else: new_dp[new_s] = current_cost + cost0 # Option 2: assign to 1 new_s_1 = s new_cost_1 = current_cost + cost1 if new_s_1 in new_dp: if new_cost_1 < new_dp[new_s_1]: new_dp[new_s_1] = new_cost_1 else: new_dp[new_s_1] = new_cost_1 current_dp = new_dp if target_sum in current_dp: min_cost = current_dp[target_sum] print(min_cost // 2) else: print(-1)