import java.util.*;
import java.lang.*;
import java.io.*;
abstract class Chainable {
public Chainable andThen(Chainable after) {
Chainable current = this;
return new Chainable() {
@Override
public void apply() {
current.apply();
after.apply();
}
};
}
public abstract void apply();
}
class Ideone {
public static void main
(String[] args
) { Chainable chained = new Chainable() {
@Override
public void apply() {
System.
out.
println("Learn Javasript"); }
};
chained = chained.andThen(new Chainable() {
@Override
public void apply() {
System.
out.
println("Learn Vue"); }
});
chained = chained.andThen(new Chainable() {
@Override
public void apply() {
System.
out.
println("Build something awesome"); }
});
chained.apply();
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgphYnN0cmFjdCBjbGFzcyBDaGFpbmFibGUgewoKICAgIHB1YmxpYyBDaGFpbmFibGUgYW5kVGhlbihDaGFpbmFibGUgYWZ0ZXIpIHsKICAgICAgICBDaGFpbmFibGUgY3VycmVudCA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG5ldyBDaGFpbmFibGUoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBhcHBseSgpIHsKICAgICAgICAgICAgICAgIGN1cnJlbnQuYXBwbHkoKTsKICAgICAgICAgICAgICAgIGFmdGVyLmFwcGx5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQoKICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFwcGx5KCk7Cgp9CgpjbGFzcyBJZGVvbmUgewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBDaGFpbmFibGUgY2hhaW5lZCA9IG5ldyBDaGFpbmFibGUoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZSAKICAgICAgICAgICAgcHVibGljIHZvaWQgYXBwbHkoKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXJuIEphdmFzcmlwdCIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBjaGFpbmVkID0gY2hhaW5lZC5hbmRUaGVuKG5ldyBDaGFpbmFibGUoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBhcHBseSgpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhcm4gVnVlIik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBjaGFpbmVkID0gY2hhaW5lZC5hbmRUaGVuKG5ldyBDaGFpbmFibGUoKSB7CiAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICBwdWJsaWMgdm9pZCBhcHBseSgpIHsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQnVpbGQgc29tZXRoaW5nIGF3ZXNvbWUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNoYWluZWQuYXBwbHkoKTsKICAgIH0KfQo=