import java.util.*;
import java.util.stream.*;
class IntPermutation implements Iterable<int[]> {
private final int[] a;
public IntPermutation(int[] a) {
this.a = a;
}
public Iterator<int[]> iterator() {
return a
== null ? Collections.
emptyIterator() : new Iterator
<int[]>() { private int[] a = IntPermutation.this.a.clone();
public boolean hasNext() {return a != null;}
public int[] next() {
int[] b = a.clone();
a = next_or_null(a);
return b;
}
};
}
public Stream<int[]> stream() {
return StreamSupport.stream(spliterator(), false);
}
private static int[] swap(int i, int j, int[] a) {
int t = a[i];a[i] = a[j];a[j] = t;
return a;
}
private static int[] rev(int b, int e, int[] a) {
for (e--; b < e; b++, e--) a = swap(b, e, a);
return a;
}
private static int[] next_or_null(int[] a) {
int e = a.length;
for (int i = e - 2, j = e - 1; 0 <= i; i--, j--)
if (a[i] < a[j])
for (int k = e - 1; i < k; k--)
if (a[i] < a[k])
return rev(j, e, swap(i, k, a));
return null;
}
}
class Ideone {
private static int[] f(int[] a, int n) {
var it = new IntPermutation(a).iterator();
for (int i = 1; i <= n && it.hasNext(); i++) {
var b = it.next();
if (i == n) return b;
}
return null;
}
public static void main
(String[] args
) { System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
1))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
2))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
3))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
123456))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
234567))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
2,
3,
4,
5,
6,
7,
8,
9},
362880))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
1))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
2))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
3))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
123456))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
234567))); System.
out.
println(Arrays.
toString(f
(new int[] {1,
1,
1,
2,
2,
2,
3,
3,
3,
4,
4,
4},
369600))); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwpjbGFzcyBJbnRQZXJtdXRhdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPGludFtdPiB7CiAgICBwcml2YXRlIGZpbmFsIGludFtdIGE7CiAgICBwdWJsaWMgSW50UGVybXV0YXRpb24oaW50W10gYSkgewogICAgICAgIHRoaXMuYSA9IGE7CiAgICB9CiAgICBwdWJsaWMgSXRlcmF0b3I8aW50W10+IGl0ZXJhdG9yKCkgewogICAgICAgIHJldHVybiBhID09IG51bGwgPyBDb2xsZWN0aW9ucy5lbXB0eUl0ZXJhdG9yKCkgOiBuZXcgSXRlcmF0b3I8aW50W10+KCkgewogICAgICAgICAgICBwcml2YXRlIGludFtdIGEgPSBJbnRQZXJtdXRhdGlvbi50aGlzLmEuY2xvbmUoKTsKICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHtyZXR1cm4gYSAhPSBudWxsO30KICAgICAgICAgICAgcHVibGljIGludFtdIG5leHQoKSB7CiAgICAgICAgICAgICAgICBpZiAoIWhhc05leHQoKSkgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgIGludFtdIGIgPSBhLmNsb25lKCk7CiAgICAgICAgICAgICAgICBhID0gbmV4dF9vcl9udWxsKGEpOwogICAgICAgICAgICAgICAgcmV0dXJuIGI7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQogICAgcHVibGljIFN0cmVhbTxpbnRbXT4gc3RyZWFtKCkgewogICAgICAgIHJldHVybiBTdHJlYW1TdXBwb3J0LnN0cmVhbShzcGxpdGVyYXRvcigpLCBmYWxzZSk7CiAgICB9CiAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBzd2FwKGludCBpLCBpbnQgaiwgaW50W10gYSkgewogICAgICAgIGludCB0ID0gYVtpXTthW2ldID0gYVtqXTthW2pdID0gdDsKICAgICAgICByZXR1cm4gYTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIGludFtdIHJldihpbnQgYiwgaW50IGUsIGludFtdIGEpIHsKICAgICAgICBmb3IgKGUtLTsgYiA8IGU7IGIrKywgZS0tKSBhID0gc3dhcChiLCBlLCBhKTsKICAgICAgICByZXR1cm4gYTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIGludFtdIG5leHRfb3JfbnVsbChpbnRbXSBhKSB7CiAgICAgICAgaW50IGUgPSBhLmxlbmd0aDsKICAgICAgICBmb3IgKGludCBpID0gZSAtIDIsIGogPSBlIC0gMTsgMCA8PSBpOyBpLS0sIGotLSkKICAgICAgICAgICAgaWYgKGFbaV0gPCBhW2pdKQogICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IGUgLSAxOyBpIDwgazsgay0tKQogICAgICAgICAgICAgICAgICAgIGlmIChhW2ldIDwgYVtrXSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldihqLCBlLCBzd2FwKGksIGssIGEpKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQpjbGFzcyBJZGVvbmUgewogICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gZihpbnRbXSBhLCBpbnQgbikgewogICAgICAgIHZhciBpdCA9IG5ldyBJbnRQZXJtdXRhdGlvbihhKS5pdGVyYXRvcigpOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4gJiYgaXQuaGFzTmV4dCgpOyBpKyspIHsKICAgICAgICAgICAgdmFyIGIgPSBpdC5uZXh0KCk7CiAgICAgICAgICAgIGlmIChpID09IG4pIHJldHVybiBiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDEpKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFycmF5cy50b1N0cmluZyhmKG5ldyBpbnRbXSB7MSwyLDMsNCw1LDYsNyw4LDl9LCAyKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoZihuZXcgaW50W10gezEsMiwzLDQsNSw2LDcsOCw5fSwgMykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDEyMzQ1NikpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDIzNDU2NykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDM2Mjg4MCkpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDEpKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFycmF5cy50b1N0cmluZyhmKG5ldyBpbnRbXSB7MSwxLDEsMiwyLDIsMywzLDMsNCw0LDR9LCAyKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoZihuZXcgaW50W10gezEsMSwxLDIsMiwyLDMsMywzLDQsNCw0fSwgMykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDEyMzQ1NikpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDIzNDU2NykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDM2OTYwMCkpKTsKICAgIH0KfQo=
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 9, 8]
[1, 2, 3, 4, 5, 6, 8, 7, 9]
[4, 1, 6, 5, 8, 9, 7, 3, 2]
[6, 8, 4, 7, 5, 3, 2, 1, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4]
[1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4]
[2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4]
[3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2]
[4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]