class Solution {
private:
vector<vector<int>> res;
vector<int> path;
public:
vector<vector<int> > subsets(vector<int> &S) {
sort(S.begin(), S.end());
for(int i=0; i<=S.size(); i++){
dfs(S, 0, i);
}
return res;
}
void dfs(vector<int>& num, int start, int k){
if(path.size() == k){
res.push_back(path);
return;
}
for(int i=start; i<num.size(); i++){
path.push_back(num[i]);
dfs(num, i+1, k);
path.pop_back();
}
}
};