python3 - <<'PY' p=996979 K=[(22716,22810),(397695,397787),(731292,731385),(1019695,1019789),(1394674,1394766),(1728271,1728364)] W=[b-a for a,b in K]%0N=0%0NY=%0Ntot=0%0Nmax=0 patterns=[] def gen(pos,cost,arr,D): if pos==46: patterns.append(tuple(arr)) return w=1 if pos in (0,45) else 2 for e in range((D-cost)//w+1): arr.append(e); gen(pos+1,cost+w*e,arr,D); arr.pop() for m,(L,U) in enumerate(K[:3]): D=W[m]-90 patterns.clear() gen(0,0,[],D) for e in patterns: delta=90+2*sum(e[1:45])+e[0]+e[45] # u=2*y1+1+e0, L<=u, u+delta<=U lo=(L-1-e[0]+1)//2 hi=(U-delta-1-e[0])//2 for y1 in range(lo,hi+1): ys=[y1]; y=y1 for g in e: y+=1+g; ys.append(y) assert len(ys)==47 and ys[0]+ys[1]>=L and ys[-2]+ys[-1]<=U NY+=1 y1,y47=ys[0],ys[-1] A=[]; B=[] for li,ui in K: a0=max(0,li-y1); a1=min(y1-1,ui-y47) if a0<=a1: A.append((a0,a1)) b0=max(y47+1,li-y1); b1=min(p-1,ui-y47) if b0<=b1: B.append((b0,b1)) cnt=0 for a0,a1 in A: for b0,b1 in B: for lk,uk in K: for a in range(a0,a1+1): l=max(b0,lk-a); h=min(b1,uk-a) if h>=l: cnt+=h-l+1 Ntot+=cnt if cnt>Nmax: Nmax=cnt print('Y',NY,'pairs',Ntot,'maxperY',Nmax) PY