In previous Mul/Add optimization, when a common set of terms/symbols was found it was removed from expressions so it doesn't appear again. Previous code:

    # remove this set of symbols so it doesn't appear again
                adds[i] = adds[i].difference(com)
                adds[j] = adds[j].difference(com)

Now, the common terms operation is included in the result set for possible future matches (`op_args[j] = diff_j | set([com_op])` ), allowing `cse([w*x, w*x*y, w*x*y*z])` to result in `[(x0, w*x), (x1, x0*y)], [x0, x1, x1*z]`.