n = int(input()) s = input().strip() from collections import defaultdict # We'll track the current balance and the minimal balance encountered so far. # The state is (current_balance, min_balance), and we keep the minimal flips for each state. dp = defaultdict(lambda: float('inf')) dp[(0, 0)] = 0 # Initial state: balance 0, min_balance 0, flips 0 for char in s: new_dp = defaultdict(lambda: float('inf')) for (current_balance, min_balance), flips in dp.items(): if char == '1': new_balance = current_balance + 1 new_min = min(min_balance, new_balance) if new_balance >= min_balance: if new_dp[(new_balance, new_min)] > flips: new_dp[(new_balance, new_min)] = flips else: # Option 1: flip to '1' new_balance_flip = current_balance + 1 new_min_flip = min(min_balance, new_balance_flip) if new_balance_flip >= min_balance: if new_dp[(new_balance_flip, new_min_flip)] > flips + 1: new_dp[(new_balance_flip, new_min_flip)] = flips + 1 # Option 2: not flip new_balance_noflip = current_balance - 1 if new_balance_noflip >= min_balance: new_min_noflip = min(min_balance, new_balance_noflip) if new_dp[(new_balance_noflip, new_min_noflip)] > flips: new_dp[(new_balance_noflip, new_min_noflip)] = flips dp = new_dp if not dp: print(-1) # Not possible, but according to problem constraints, input is always valid. else: print(min(dp.values()))