import java.util.List;
import java.util.ArrayList;
import java.util.function.Supplier;
class SubListMadness {
public static void main
(String[] args
) { printResult(() -> exampleList().subList(0,3));
printResult(() -> exampleList().subList(0,4));
printResult(() -> exampleList().subList(-1,4));
printResult(() -> exampleList().subList(-1,5));
printResult(() -> exampleList().subList(0,5));
printResult(() -> exampleList().subList(5,5));
printResult(() -> exampleList().subList(5,4));
printResult(() -> exampleList().subList(4,4)); //WTF?!
}
private static List<String> exampleList() {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
return list;
}
private static <T> void printResult(Supplier<T> s) {
try {
System.
out.
println(e.
getClass() + " " + e.
getMessage()); }
}
}
aW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKCmNsYXNzIFN1Ykxpc3RNYWRuZXNzIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBwcmludFJlc3VsdCgoKSAtPiBleGFtcGxlTGlzdCgpLnN1Ykxpc3QoMCwzKSk7CiAgICAgICAgcHJpbnRSZXN1bHQoKCkgLT4gZXhhbXBsZUxpc3QoKS5zdWJMaXN0KDAsNCkpOwogICAgICAgIHByaW50UmVzdWx0KCgpIC0+IGV4YW1wbGVMaXN0KCkuc3ViTGlzdCgtMSw0KSk7CiAgICAgICAgcHJpbnRSZXN1bHQoKCkgLT4gZXhhbXBsZUxpc3QoKS5zdWJMaXN0KC0xLDUpKTsKICAgICAgICBwcmludFJlc3VsdCgoKSAtPiBleGFtcGxlTGlzdCgpLnN1Ykxpc3QoMCw1KSk7CiAgICAgICAgcHJpbnRSZXN1bHQoKCkgLT4gZXhhbXBsZUxpc3QoKS5zdWJMaXN0KDUsNSkpOwogICAgICAgIHByaW50UmVzdWx0KCgpIC0+IGV4YW1wbGVMaXN0KCkuc3ViTGlzdCg1LDQpKTsKICAgICAgICBwcmludFJlc3VsdCgoKSAtPiBleGFtcGxlTGlzdCgpLnN1Ykxpc3QoNCw0KSk7IC8vV1RGPyEKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBMaXN0PFN0cmluZz4gZXhhbXBsZUxpc3QoKSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICBsaXN0LmFkZCgiYSIpOwogICAgICAgIGxpc3QuYWRkKCJiIik7CiAgICAgICAgbGlzdC5hZGQoImMiKTsKICAgICAgICBsaXN0LmFkZCgiZCIpOwogICAgICAgIHJldHVybiBsaXN0OwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIDxUPiB2b2lkIHByaW50UmVzdWx0KFN1cHBsaWVyPFQ+IHMpIHsKICAgICAgICB0cnkgewogICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzLmdldCgpKTsgCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0Q2xhc3MoKSArICIgIiArIGUuZ2V0TWVzc2FnZSgpKTsKICAgICAgICB9ICAgCiAgICB9ICAgCn0K