package utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Permutation {
public static <T> List<List<T>> permutation(Collection<T> list, int n) {
List<List<T>> res = new ArrayList<>();
permutation(list, n, new ArrayList<>(), new HashSet<>(), res);
return res;
}
private static <T> void permutation(Collection<T> all, int n, List<T> current, Set<T> used, List<List<T>> result) {
if (current.size() == n) {
result.add(new ArrayList<>(current));
return;
}
for (T elem : all) {
if (! used.contains(elem)) {
current.add(elem);
used.add(elem);
permutation(all, n, current, used, result);
current.remove(current.size() - 1);
used.remove(elem);
}
}
}
}