factXifzeroXn__s0n__prodXfactpXadd0XXaddsXYsaddXYprod0X0prodsXYaddYprodXYiftrueXYactivateXiffalseXYactivateYzero0truezerosXfalsepsXXsXn__sXprodX1X2n__prodX1X2activaten__sXsXactivaten__prodX1X2prodX1X2activateXXfactXfactXifzeroXn__s0n__prodXfactpXXpXifzeroXn__s0n__prodX