import
java.util.*;
import
java.math.*;
public
class
Main {
static
void
main(
int
[] A,
int
[] B) {
int
req_sum = Arrays.stream(A).sum() / B.length;
List<List<Integer>> finalList =
new
ArrayList<>();
for
(
int
i : B) {
List<List<Integer>> tempList = subsets(A, i);
for
(List<Integer> j : tempList) {
if
(j.stream().mapToInt(Integer::intValue).sum() == req_sum) {
finalList.add(j);
A = removeElements(A, j);
break
;
}
}
}
System.out.println(finalList);
}
private
static
int
[] removeElements(
int
[] A, List<Integer> j) {
List<Integer> result =
new
ArrayList<>();
for
(
int
i : A) {
if
(!j.contains(i)) {
result.add(i);
}
}
return
result.stream().mapToInt(Integer::intValue).toArray();
}
private
static
List<List<Integer>> subsets(
int
[] A,
int
i) {
List<List<Integer>> result =
new
ArrayList<>();
combinations(A,
0
, i,
new
ArrayList<>(), result);
return
result;
}
private
static
void
combinations(
int
[] A,
int
start,
int
k, List<Integer> current, List<List<Integer>> result) {
if
(k ==
0
) {
result.add(
new
ArrayList<>(current));
return
;
}
for
(
int
i = start; i < A.length; i++) {
current.add(A[i]);
combinations(A, i +
1
, k -
1
, current, result);
current.remove(current.size() -
1
);
}
}
public
static
void
main(String[] args) {
int
[] A =
new
int
[]{
1
,
2
,
3
,
4
,
5
,
6
};
int
[] B =
new
int
[]{
2
,
2
,
2
};
main(A, B);
}
}