import java.util.*;

public class Solution {
    public ArrayList<ArrayList<Integer>> subsets(int[] S) {
        if(S == null || S.length == 0) return new ArrayList<>() ;
        ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
        //dp[i]表示以 S[i-1]结尾的所有的 子集合
        ArrayList<ArrayList<Integer>>[] dp = new ArrayList[S.length+1];
        ArrayList<ArrayList<Integer>> aa0 = new ArrayList<>() ;
        ArrayList<Integer> a0 = new ArrayList<>() ;
        aa0.add(a0) ;
        dp[0] = aa0 ;
        res.addAll(dp[0]) ;
        for(int i = 1 ; i < dp.length ; i ++) {
            ArrayList<ArrayList<Integer>> cur = new ArrayList<>() ;
            for(int j = 0 ; j < i ; j ++) {
               ArrayList<ArrayList<Integer>> curj = dp[j] ;
               for(ArrayList<Integer> l : curj) {
                   ArrayList<Integer> ll = new ArrayList(l) ;
                   ll.add(S[i-1]) ;
                   cur.add(ll) ;
               }
            }
            dp[i] = cur ;
            res.addAll(dp[i]) ;
        }
        Collections.sort(res , (l1 , l2)->{
            if(l1.size() == l2.size()) {
                for(int i = 0 ; i < l1.size() ; i ++) {
                    if(l1.get(i) != l2.get(i)) {
                        return l1.get(i) - l2.get(i) ;
                    }
                }
                return 0 ;
            } else {
                return l1.size() - l2.size() ;
            }
        }) ;
        return res ;
    }   
}