import java.util.*;

public class Solution {
    public ArrayList<ArrayList<Integer>> subsets(int[] S) {
        Arrays.sort(S) ;
        ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
        res.add(new ArrayList<Integer>()) ;
        for(int len = 1 ; len <= S.length ; len ++) {//长度,求出每一种按长度的所有情况
            int resSize = res.size() ;
            for(int k = 0 ; k < resSize ; k ++) {//要求长度n的所有情况,先遍历拿到长度n-1的所有情况
                ArrayList<Integer> list = res.get(k) ;
                if(list.size() == len - 1) {
                    int start = list.size() == 0 ? Integer.MIN_VALUE : list.get(list.size() - 1) ;
                    for(int i = 0 ; i < S.length ; i ++) {//在n-1的每一种情况后面,添加一位更大的数
                        if(S[i] <= start) continue ;
                        ArrayList<Integer> new_list = new ArrayList(list) ;
                        new_list.add(S[i]) ;
                        res.add(new_list) ;
                    }
                }
            }
        }
        return res ;
    }
}