public static List<List<Integer>> subsets(int[] S) {
    	Arrays.sort(S, 0, S.length);
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        List<Integer> n = new ArrayList<Integer>();
        res.add(n);
        for (int i : S) {
        	int len = res.size();
        	for (int j = 0; j < len; j++) {
        		ArrayList<Integer> t = (ArrayList<Integer>) res.get(j);
        		ArrayList<Integer> c = (ArrayList<Integer>) t.clone();
        		c.add(i);
        		if (!res.contains(c)) {
        			res.add(c);
        		}
        	}
        }
    	return res;
    }