def equal_binary_subarrays(nums):
    earliest, frequency = {0: 0}, {0: 1}
    balance = longest = count = 0
    for right, bit in enumerate(nums, 1):
        balance += 1 if bit == 1 else -1
        count += frequency.get(balance, 0)
        if balance in earliest:
            longest = max(longest, right - earliest[balance])
        earliest.setdefault(balance, right)
        frequency[balance] = frequency.get(balance, 0) + 1
    return longest, count
