class Solution {
public:
vector<vector<int>> res;
int flag = 0;
void helper(vector<int> nums, int begin, vector<int> curres){
if (flag) res.push_back(curres);
else{
for (int i=begin; i<=nums.size(); ){
if (i == nums.size()){
flag++;
helper(nums, i+1, curres);
flag--;
i++;
continue;
}
int nxti = i+1;
while(nxti < nums.size() && nums[nxti-1] == nums[nxti]) nxti++;
curres.push_back(nums[i]);
helper(nums, i+1, curres);
curres.pop_back();
i = nxti;
}
}
return;
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
helper(nums, 0, vector<int>());
return res;
}
};