public static ArrayList<ArrayList<Integer>> powerSet(ArrayList<Integer> set) {
		if (set.size() == 0) {
			ArrayList<ArrayList<Integer>> emptySet = new ArrayList<ArrayList<Integer>> (1);
			emptySet.add(new ArrayList<Integer> (0));
			return emptySet;
		}

		int x = set.remove(0);
		ArrayList<ArrayList<Integer>> answer = new ArrayList<ArrayList<Integer>> ();

		for (ArrayList<Integer> subset : powerSet(set)) {
			answer.add(new ArrayList<Integer>(subset));
			subset.add(x);
			answer.add(subset);
		}

		return answer;
	}