#include <vector>
class Solution {    
public:
void dfs(vector<vector<int>> & ans, vector<int> temp, vector<int> S, int start,int l){
    if(l == temp.size()) {
        ans.push_back(temp);
        return;
    }

    for(int i = start; i < S.size(); i ++){
        temp.push_back(S[i]);
        dfs(ans, temp, S, i + 1, l);
        temp.pop_back();
    }
    return;
}

    vector<vector<int> > subsets(vector<int>& S) {
        vector<vector<int>> ans;
        vector<int> temp;
        ans.push_back(temp);
        for(int i = 1; i <= S.size(); i ++ ){
            dfs(ans, temp, S, 0, i);//这个代码相当于是每一层一个for,第几层就会有几个元素
        }
        return ans;
    }
};