import java.util.*;
import java.util.function.*;
import java.time.*;
class Ideone {
private static <X, Y
> List
<Y
> mapi
(BiFunction
<Integer, X, Y
> f, List
<X
> xs
) { List<Y> ys = new ArrayList<>();
for (int i = 0; i < xs.size(); i++)
ys.
add(f.
apply(Integer.
valueOf(i
), xs.
get(i
))); return ys;
}
private static <X> List<X> sort(Comparator<X> c, List<X> xs) {
List<X> ys = new ArrayList<>(xs);
ys.sort(c);
return ys;
}
private static <X, Y> List<Y> map(Function<X, Y> f, List<X> xs) {
List<Y> ys = new ArrayList<>();
for (X x : xs) ys.add(f.apply(x));
return ys;
}
private static <E extends Comparable<E>> List<Integer> sorti(List<E> cs) {
/*
record IndexedValue<T extends Comparable<? super T>>(Integer index, T value) implements Comparable<IndexedValue<T>> {
public int compareTo(IndexedValue<T> other) {
return value.compareTo(other.value);
}
}
*/
class IndexedValue<T extends Comparable<? super T>> implements Comparable<IndexedValue<T>> {
private T value;
public Integer index
() {return index
;} public IndexedValue
(Integer index, T value
) {this.
index = index
;this.
value = value
;} public int compareTo(IndexedValue<T> other) {return value.compareTo(other.value);}
}
return map(IndexedValue<E>::index, sort(IndexedValue<E>::compareTo, mapi(IndexedValue<E>::new, cs)));
}
private static <E extends Comparable<E>> List<Integer> f(List<E> cs) {
return sorti(sorti(cs));
}
private static <E extends Comparable<E>> void g(List<E> cs) {
}
public static void main
(String[] args
) { g
(Arrays.
asList(1,
100,
10,
10000,
1000)); g
(Arrays.
asList(3,
1,
4,
1,
5,
9,
2)); g
(Arrays.
asList(0,
1,
0,
1,
0,
1,
0,
1)); g
(Arrays.
asList("A",
"C",
"B",
"E",
"D")); g
(Arrays.
asList(Month.
MARCH, Month.
JANUARY, Month.
APRIL, Month.
JANUARY, Month.
MAY, Month.
SEPTEMBER, Month.
FEBRUARY)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CmltcG9ydCBqYXZhLnRpbWUuKjsKY2xhc3MgSWRlb25lIHsKICAgIHByaXZhdGUgc3RhdGljIDxYLCBZPiBMaXN0PFk+IG1hcGkoQmlGdW5jdGlvbjxJbnRlZ2VyLCBYLCBZPiBmLCBMaXN0PFg+IHhzKSB7CiAgICAgICAgTGlzdDxZPiB5cyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgIHlzLmFkZChmLmFwcGx5KEludGVnZXIudmFsdWVPZihpKSwgeHMuZ2V0KGkpKSk7CiAgICAgICAgcmV0dXJuIHlzOwogICAgfQogICAgcHJpdmF0ZSBzdGF0aWMgPFg+IExpc3Q8WD4gc29ydChDb21wYXJhdG9yPFg+IGMsIExpc3Q8WD4geHMpIHsKICAgICAgICBMaXN0PFg+IHlzID0gbmV3IEFycmF5TGlzdDw+KHhzKTsKICAgICAgICB5cy5zb3J0KGMpOwogICAgICAgIHJldHVybiB5czsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIDxYLCBZPiBMaXN0PFk+IG1hcChGdW5jdGlvbjxYLCBZPiBmLCBMaXN0PFg+IHhzKSB7CiAgICAgICAgTGlzdDxZPiB5cyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGZvciAoWCB4IDogeHMpIHlzLmFkZChmLmFwcGx5KHgpKTsKICAgICAgICByZXR1cm4geXM7CiAgICB9CiAgICBwcml2YXRlIHN0YXRpYyA8RSBleHRlbmRzIENvbXBhcmFibGU8RT4+IExpc3Q8SW50ZWdlcj4gc29ydGkoTGlzdDxFPiBjcykgewogICAgICAgIC8qCiAgICAgICAgcmVjb3JkIEluZGV4ZWRWYWx1ZTxUIGV4dGVuZHMgQ29tcGFyYWJsZTw/IHN1cGVyIFQ+PihJbnRlZ2VyIGluZGV4LCBUIHZhbHVlKSBpbXBsZW1lbnRzIENvbXBhcmFibGU8SW5kZXhlZFZhbHVlPFQ+PiB7CiAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEluZGV4ZWRWYWx1ZTxUPiBvdGhlcikgewogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmNvbXBhcmVUbyhvdGhlci52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgKi8KICAgICAgICBjbGFzcyBJbmRleGVkVmFsdWU8VCBleHRlbmRzIENvbXBhcmFibGU8PyBzdXBlciBUPj4gaW1wbGVtZW50cyBDb21wYXJhYmxlPEluZGV4ZWRWYWx1ZTxUPj4gewogICAgICAgIAlwcml2YXRlIEludGVnZXIgaW5kZXg7CiAgICAgICAgCXByaXZhdGUgVCB2YWx1ZTsKICAgICAgICAJcHVibGljIEludGVnZXIgaW5kZXgoKSB7cmV0dXJuIGluZGV4O30KICAgICAgICAJcHVibGljIEluZGV4ZWRWYWx1ZShJbnRlZ2VyIGluZGV4LCBUIHZhbHVlKSB7dGhpcy5pbmRleCA9IGluZGV4O3RoaXMudmFsdWUgPSB2YWx1ZTt9CiAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKEluZGV4ZWRWYWx1ZTxUPiBvdGhlcikge3JldHVybiB2YWx1ZS5jb21wYXJlVG8ob3RoZXIudmFsdWUpO30KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1hcChJbmRleGVkVmFsdWU8RT46OmluZGV4LCBzb3J0KEluZGV4ZWRWYWx1ZTxFPjo6Y29tcGFyZVRvLCBtYXBpKEluZGV4ZWRWYWx1ZTxFPjo6bmV3LCBjcykpKTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIDxFIGV4dGVuZHMgQ29tcGFyYWJsZTxFPj4gTGlzdDxJbnRlZ2VyPiBmKExpc3Q8RT4gY3MpIHsKICAgICAgICByZXR1cm4gc29ydGkoc29ydGkoY3MpKTsKICAgIH0KICAgIHByaXZhdGUgc3RhdGljIDxFIGV4dGVuZHMgQ29tcGFyYWJsZTxFPj4gdm9pZCBnKExpc3Q8RT4gY3MpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZihjcykpOwogICAgfQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGcoQXJyYXlzLmFzTGlzdCgxLDEwMCwxMCwxMDAwMCwxMDAwKSk7CiAgICAgICAgZyhBcnJheXMuYXNMaXN0KDMsMSw0LDEsNSw5LDIpKTsKICAgICAgICBnKEFycmF5cy5hc0xpc3QoMCwxLDAsMSwwLDEsMCwxKSk7CiAgICAgICAgZyhBcnJheXMuYXNMaXN0KCJBIiwiQyIsIkIiLCJFIiwiRCIpKTsKICAgICAgICBnKEFycmF5cy5hc0xpc3QoTW9udGguTUFSQ0gsIE1vbnRoLkpBTlVBUlksIE1vbnRoLkFQUklMLCBNb250aC5KQU5VQVJZLCBNb250aC5NQVksIE1vbnRoLlNFUFRFTUJFUiwgTW9udGguRkVCUlVBUlkpKTsKICAgIH0KfQo=
[0, 2, 1, 4, 3]
[3, 0, 4, 1, 5, 6, 2]
[0, 4, 1, 5, 2, 6, 3, 7]
[0, 2, 1, 4, 3]
[3, 0, 4, 1, 5, 6, 2]