import
java.util.*;
class
Main {
static
List<List<Integer>> powerSet(
int
[] arr,
int
N) {
int
pow1 = (
int
) Math.pow(
2
, N);
List<List<Integer>> v =
new
ArrayList<>();
for
(
int
count =
0
; count < pow1; count++) {
List<Integer> temp =
new
ArrayList<>();
for
(
int
j =
0
; j < N; j++) {
if
((count & (
1
<< j)) !=
0
) {
temp.add(arr[j]);
}
}
Collections.sort(temp);
if
(count !=
0
) {
v.add(temp);
}
}
return
v;
}
static
List<Integer> kthSmallestSubset(
int
[] arr,
int
N,
int
K) {
List<List<Integer>> powSet = powerSet(arr, N);
Collections.sort(powSet,
new
LexicographicComparator());
return
powSet.get(K -
1
);
}
public
static
void
main(String[] args) {
int
[] arr = {
1
,
2
,
3
,
4
};
int
N = arr.length;
int
K =
5
;
List<Integer> ans = kthSmallestSubset(arr, N, K);
for
(
int
x : ans) {
System.out.print(x +
" "
);
}
}
static
class
LexicographicComparator
implements
Comparator<List<Integer>> {
public
int
compare(List<Integer> a, List<Integer> b) {
int
n = a.size(), m = b.size();
for
(
int
i =
0
; i < n && i < m; i++) {
if
(a.get(i) != b.get(i))
return
a.get(i) - b.get(i);
}
return
n - m;
}
}
}