def correct(x,p): x = list(x) if len(x) == 0: return 0,0,[] bits = 0 while (1<>bit)) pmask = p[bit] anyp |= pmask borrow = (pmask&nmask&borrow)|((nmask|borrow)&~pmask) nmask = -(1&(len(x)>>bits)) borrow = nmask|borrow assert sec == borrow&overall assert ded == (anyp&~overall)|(overall&~borrow) return sec,ded,x