s//instance (Monoid a) => Monoid (a) where mempty = (mempty) (a1),(a2) = (a1,a2) /;s/,/ `mappend` /g;s!(\PP*?)\K(?=\))!",${($1^o)&b}".$1=~s/\b$a(?=\d|$)/$b/gr!ge,print while$a=$b||=a,$b++^J