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 ;
}
}