import
java.util.ArrayList;
import
java.util.List;
public
class
PartitionGenerator {
static
void
printPartition(List<List<Integer>> ans) {
for
(List<Integer> subset : ans) {
System.out.print(
"{ "
);
for
(
int
element : subset) {
System.out.print(element +
" "
);
}
System.out.print(
"} "
);
}
System.out.println();
}
static
void
partition(List<Integer> set,
int
index, List<List<Integer>> ans) {
if
(index == set.size()) {
printPartition(ans);
return
;
}
for
(
int
i =
0
; i < ans.size(); i++) {
ans.get(i).add(set.get(index));
partition(set, index +
1
, ans);
ans.get(i).remove(ans.get(i).size() -
1
);
}
List<Integer> newSubset =
new
ArrayList<>();
newSubset.add(set.get(index));
ans.add(newSubset);
partition(set, index +
1
, ans);
ans.remove(ans.size() -
1
);
}
static
void
allPartitions(List<Integer> set) {
List<List<Integer>> partitions =
new
ArrayList<>();
partition(set,
0
, partitions);
}
public
static
void
main(String[] args) {
int
n =
3
;
List<Integer> set =
new
ArrayList<>();
for
(
int
i =
0
; i < n; i++) {
set.add(i +
1
);
}
System.out.println(
"All partitions of the set will be: "
);
allPartitions(set);
}
}