class Solution:
def back(self,nums,start,used,path,res):
res.append(path[:])
for i in range(start,len(nums)):
if i > 0 and nums[i] == nums[i-1] and used[i-1] == False:
continue
used[i] = True
path.append(nums[i])
self.back(nums,i+1,used,path,res)
used[i] = False
path.pop()
def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
res = []
used = [False]*(len(nums))
nums.sort()
self.back(nums,0,used,[],res)
return res