implement set union