C题讨论合并的段是否相邻即可
from itertools import accumulate

def f(x):
    return (x+1)*x >> 1

def main():
    n = int(input())
    s = list(map(len,input().split("0"))); m = len(s)
    if m < 3: return print(f(n))
    t = [0]; t.extend(accumulate(s))
    r = [0]; r.extend(accumulate(map(f,s)))
    ans = r[-1]+max(f(t[i+3]-t[i]+2)-(r[i+3]-r[i]) for i in range(m-2))
    gap = [f(t[i+2]-t[i]+1)-(r[i+2]-r[i]) for i in range(m-1)]
    ans = max(ans,r[-1]+max(x+y for x,y in zip(accumulate(gap,max),gap[2:])))
    print(ans)
    
main()