class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param S int整型vector 
     * @return int整型vector<vector<>>
     */

    vector<int> makeset(int bitset, vector<int>& S)
    {
        int pos = 0;
        vector<int> res;
        while(bitset)
        {
            if (bitset & 1)
            {
                res.push_back(S[pos]);
            }
            pos++;
            bitset = bitset >> 1;
        }

        for (auto it : res) cout << it << ' ';
        cout << endl;
        return res;
    }
    vector<vector<int> > subsets(vector<int>& S) {
        vector<vector<int>> res;
        if (S.size() == 0) return res;
        int len = (1 << S.size()) - 1;
        for (int i = 0; i <= len; i++)
        {
            res.push_back(makeset(i, S));
        }
        sort(res.begin(), res.end(), [](vector<int>& a, vector<int>& b){
            return a.size() < b.size();
        });
        return res;
    }
};