import java.util.*;
import java.util.stream.*;
class IntPermutation implements Iterable<int[]> {
private final int[] a;
public IntPermutation(int[] a) {
this.a = a.clone();
}
public IntPermutation(int n) {
this.a = new int[n];
for (int i = 0; i < n; i++) a[i] = i;
}
public Iterator<int[]> iterator() {
return iterator_shared();
}
public Iterator<int[]> iterator_isolated() {
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 Iterator<int[]> iterator_shared() {
return a
== null ? Collections.
emptyIterator() : new Iterator
<int[]>() { private int[] a = IntPermutation.this.a.clone();
private int[] b = a;
public boolean hasNext() {
if (a != null && b == null) b = a = next_or_null(a);
return a != null;
}
public int[] next() {
b = null;
return a;
}
};
}
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();
if (0 < n) for (int i = 1; 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))); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLnN0cmVhbS4qOwpjbGFzcyBJbnRQZXJtdXRhdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPGludFtdPiB7CiAgICBwcml2YXRlIGZpbmFsIGludFtdIGE7CiAgICBwdWJsaWMgSW50UGVybXV0YXRpb24oaW50W10gYSkgewogICAgICAgIHRoaXMuYSA9IGEuY2xvbmUoKTsKICAgIH0KICAgIHB1YmxpYyBJbnRQZXJtdXRhdGlvbihpbnQgbikgewogICAgICAgIHRoaXMuYSA9IG5ldyBpbnRbbl07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGFbaV0gPSBpOwogICAgfQogICAgcHVibGljIEl0ZXJhdG9yPGludFtdPiBpdGVyYXRvcigpIHsKICAgICAgICByZXR1cm4gaXRlcmF0b3Jfc2hhcmVkKCk7CiAgICB9CiAgICBwdWJsaWMgSXRlcmF0b3I8aW50W10+IGl0ZXJhdG9yX2lzb2xhdGVkKCkgewogICAgICAgIHJldHVybiBhID09IG51bGwgPyBDb2xsZWN0aW9ucy5lbXB0eUl0ZXJhdG9yKCkgOiBuZXcgSXRlcmF0b3I8aW50W10+KCkgewogICAgICAgICAgICBwcml2YXRlIGludFtdIGEgPSBJbnRQZXJtdXRhdGlvbi50aGlzLmEuY2xvbmUoKTsKICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHtyZXR1cm4gYSAhPSBudWxsO30KICAgICAgICAgICAgcHVibGljIGludFtdIG5leHQoKSB7CiAgICAgICAgICAgICAgICBpZiAoIWhhc05leHQoKSkgdGhyb3cgbmV3IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgIGludFtdIGIgPSBhLmNsb25lKCk7CiAgICAgICAgICAgICAgICBhID0gbmV4dF9vcl9udWxsKGEpOwogICAgICAgICAgICAgICAgcmV0dXJuIGI7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQogICAgcHVibGljIEl0ZXJhdG9yPGludFtdPiBpdGVyYXRvcl9zaGFyZWQoKSB7CiAgICAgICAgcmV0dXJuIGEgPT0gbnVsbCA/IENvbGxlY3Rpb25zLmVtcHR5SXRlcmF0b3IoKSA6IG5ldyBJdGVyYXRvcjxpbnRbXT4oKSB7CiAgICAgICAgICAgIHByaXZhdGUgaW50W10gYSA9IEludFBlcm11dGF0aW9uLnRoaXMuYS5jbG9uZSgpOwogICAgICAgICAgICBwcml2YXRlIGludFtdIGIgPSBhOwogICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewogICAgICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCAmJiBiID09IG51bGwpIGIgPSBhID0gbmV4dF9vcl9udWxsKGEpOwogICAgICAgICAgICAgICAgcmV0dXJuIGEgIT0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBwdWJsaWMgaW50W10gbmV4dCgpIHsKICAgICAgICAgICAgICAgIGlmICghaGFzTmV4dCgpKSB0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgYiA9IG51bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CiAgICBwdWJsaWMgU3RyZWFtPGludFtdPiBzdHJlYW0oKSB7CiAgICAgICAgcmV0dXJuIFN0cmVhbVN1cHBvcnQuc3RyZWFtKHNwbGl0ZXJhdG9yKCksIGZhbHNlKTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIGludFtdIHN3YXAoaW50IGksIGludCBqLCBpbnRbXSBhKSB7CiAgICAgICAgaW50IHQgPSBhW2ldO2FbaV0gPSBhW2pdO2Fbal0gPSB0OwogICAgICAgIHJldHVybiBhOwogICAgfQogICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gcmV2KGludCBiLCBpbnQgZSwgaW50W10gYSkgewogICAgICAgIGZvciAoZS0tOyBiIDwgZTsgYisrLCBlLS0pIGEgPSBzd2FwKGIsIGUsIGEpOwogICAgICAgIHJldHVybiBhOwogICAgfQogICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gbmV4dF9vcl9udWxsKGludFtdIGEpIHsKICAgICAgICBpbnQgZSA9IGEubGVuZ3RoOwogICAgICAgIGZvciAoaW50IGkgPSBlIC0gMiwgaiA9IGUgLSAxOyAwIDw9IGk7IGktLSwgai0tKQogICAgICAgICAgICBpZiAoYVtpXSA8IGFbal0pCiAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gZSAtIDE7IGkgPCBrOyBrLS0pCiAgICAgICAgICAgICAgICAgICAgaWYgKGFbaV0gPCBhW2tdKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2KGosIGUsIHN3YXAoaSwgaywgYSkpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9CmNsYXNzIElkZW9uZSB7CiAgICBwcml2YXRlIHN0YXRpYyBpbnRbXSBmKGludFtdIGEsIGludCBuKSB7CiAgICAgICAgdmFyIGl0ID0gbmV3IEludFBlcm11dGF0aW9uKGEpLml0ZXJhdG9yKCk7CiAgICAgICAgaWYgKDAgPCBuKSBmb3IgKGludCBpID0gMTsgaXQuaGFzTmV4dCgpOyBpKyspIHsKICAgICAgICAgICAgdmFyIGIgPSBpdC5uZXh0KCk7CiAgICAgICAgICAgIGlmIChpID09IG4pIHJldHVybiBiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDEpKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFycmF5cy50b1N0cmluZyhmKG5ldyBpbnRbXSB7MSwyLDMsNCw1LDYsNyw4LDl9LCAyKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoZihuZXcgaW50W10gezEsMiwzLDQsNSw2LDcsOCw5fSwgMykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDEyMzQ1NikpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDIzNDU2NykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDIsMyw0LDUsNiw3LDgsOX0sIDM2Mjg4MCkpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDEpKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKEFycmF5cy50b1N0cmluZyhmKG5ldyBpbnRbXSB7MSwxLDEsMiwyLDIsMywzLDMsNCw0LDR9LCAyKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihBcnJheXMudG9TdHJpbmcoZihuZXcgaW50W10gezEsMSwxLDIsMiwyLDMsMywzLDQsNCw0fSwgMykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDEyMzQ1NikpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDIzNDU2NykpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGYobmV3IGludFtdIHsxLDEsMSwyLDIsMiwzLDMsMyw0LDQsNH0sIDM2OTYwMCkpKTsKICAgIH0KfQo=
[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]