import
java.util.*;
class
Main {
static
char
getSmallDgtGreaterThanZero(String num,
int
n)
{
char
s_dgt =
'9'
;
for
(
int
i =
0
; i < n; i++) {
if
(num.charAt(i) < s_dgt
&& num.charAt(i) !=
'0'
) {
s_dgt = num.charAt(i);
}
}
return
s_dgt;
}
static
String kthSmallestNumber(String num,
int
k)
{
int
[] freq =
new
int
[
10
];
StringBuilder final_num =
new
StringBuilder();
Arrays.fill(freq,
0
);
int
n = num.length();
for
(
int
i =
0
; i < n; i++) {
freq[num.charAt(i) -
'0'
]++;
}
char
s_dgt = getSmallDgtGreaterThanZero(num, n);
final_num.append(s_dgt);
freq[s_dgt -
'0'
]--;
for
(
int
i =
0
; i <
10
; i++) {
for
(
int
j =
1
; j <= freq[i]; j++) {
final_num.append((
char
)(i +
'0'
));
}
}
for
(
int
i =
1
; i < k; i++) {
String temp = final_num.toString();
final_num =
new
StringBuilder();
final_num.append(nextPermutation(temp));
}
return
final_num.toString();
}
static
String nextPermutation(String str)
{
char
[] arr = str.toCharArray();
int
i = arr.length -
2
;
while
(i >=
0
&& arr[i] >= arr[i +
1
]) {
i--;
}
if
(i <
0
) {
return
str;
}
int
j = arr.length -
1
;
while
(j > i && arr[j] <= arr[i]) {
j--;
}
char
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
int
left = i +
1
;
int
right = arr.length -
1
;
while
(left < right) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
return
new
String(arr);
}
public
static
void
main(String[] args)
{
String num =
"36012679802"
;
int
k =
4
;
System.out.println(kthSmallestNumber(num, k));
}
}