That is, all components of A are also components of B. A and B may be equal; if they are unequal, then A is a proper subset of B. The relationship of one set being a subset of another is named inclusion or sometimes containment. In fact, the subsets of a given set form a Boolean algebra under the subset relation, in which the join and meet are given by intersection and union, and the subset relation itself is the Boolean inclusion relation.

COMING SOON!

```
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& S) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int>> subsets;
vector<int> integers;
if (S.empty()) return subsets;
sort(S.begin(), S.end());
DFS(integers, 0, S, subsets);
return move(subsets);
}
void DFS(vector<int>& integers, int start, vector<int>& S, vector<vector<int>>& subsets) {
if (start == S.size()) {
subsets.push_back(integers);
return;
}
int end = start;
while (end + 1 < S.size() && S[start] == S[end+1])
end += 1;
DFS(integers, end + 1, S, subsets);
for (int i = start; i <= end; i++) {
integers.push_back(S[i]);
DFS(integers, end + 1, S, subsets);
}
for (int i = start; i <= end; i++)
integers.pop_back();
}
};
```