added symmetric_difference