/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
interface Price{
int getValue();
void setValue(int value);
}
class PrimePrice implements Price{
private int value;
PrimePrice(int value){
this.value = value;
}
public int getValue(){
return this.value;
}
public void setValue(int value){
this.value = value;
}
}
abstract class MarginPrice implements Price{
protected Price originalPrice;
MarginPrice(Price price){
this.originalPrice = price;
}
public void setValue(int value){
this.originalPrice.setValue(value);
}
}
class WholesalePrice extends MarginPrice{
private int advantage;
WholesalePrice(Price price, int advantage){
super(price);
this.advantage = advantage;
}
public int getValue(){
return this.originalPrice.getValue() + advantage;
}
}
class DoublePrice extends MarginPrice{
DoublePrice(Price price){
super(price);
}
public int getValue(){
return this.originalPrice.getValue() * 2;
}
}
class Ideone{
Price price = new WholesalePrice(
new DoublePrice(
new WholesalePrice(
new DoublePrice(
new PrimePrice(120)
)
,80
)
)
,200
);
System.
out.
println(price.
getValue()); price.setValue(100);
System.
out.
println(price.
getValue()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbnRlcmZhY2UgUHJpY2V7CiAgICBpbnQgZ2V0VmFsdWUoKTsKICAgIHZvaWQgc2V0VmFsdWUoaW50IHZhbHVlKTsKfQoKY2xhc3MgUHJpbWVQcmljZSBpbXBsZW1lbnRzIFByaWNlewogICAgcHJpdmF0ZSBpbnQgdmFsdWU7CiAgICBQcmltZVByaWNlKGludCB2YWx1ZSl7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgfQogICAgcHVibGljIGludCBnZXRWYWx1ZSgpewogICAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgcHVibGljIHZvaWQgc2V0VmFsdWUoaW50IHZhbHVlKXsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICB9Cn0KCmFic3RyYWN0IGNsYXNzIE1hcmdpblByaWNlIGltcGxlbWVudHMgUHJpY2V7CiAgICBwcm90ZWN0ZWQgUHJpY2Ugb3JpZ2luYWxQcmljZTsKICAgIE1hcmdpblByaWNlKFByaWNlIHByaWNlKXsKICAgICAgICB0aGlzLm9yaWdpbmFsUHJpY2UgPSBwcmljZTsKICAgIH0KICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSl7CiAgICAgICAgdGhpcy5vcmlnaW5hbFByaWNlLnNldFZhbHVlKHZhbHVlKTsKICAgIH0KfQoKY2xhc3MgV2hvbGVzYWxlUHJpY2UgZXh0ZW5kcyBNYXJnaW5QcmljZXsKICAgIHByaXZhdGUgaW50IGFkdmFudGFnZTsKICAgIFdob2xlc2FsZVByaWNlKFByaWNlIHByaWNlLCBpbnQgYWR2YW50YWdlKXsKICAgICAgICBzdXBlcihwcmljZSk7CiAgICAgICAgdGhpcy5hZHZhbnRhZ2UgPSBhZHZhbnRhZ2U7CiAgICB9CiAgICBwdWJsaWMgaW50IGdldFZhbHVlKCl7CiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxQcmljZS5nZXRWYWx1ZSgpICsgYWR2YW50YWdlOwogICAgfQp9CgpjbGFzcyBEb3VibGVQcmljZSBleHRlbmRzIE1hcmdpblByaWNlewogICAgRG91YmxlUHJpY2UoUHJpY2UgcHJpY2UpewogICAgICAgIHN1cGVyKHByaWNlKTsKICAgIH0KICAgIHB1YmxpYyBpbnQgZ2V0VmFsdWUoKXsKICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFByaWNlLmdldFZhbHVlKCkgKiAyOwogICAgfQp9CgpjbGFzcyBJZGVvbmV7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb257CiAgICAgICAgUHJpY2UgcHJpY2UgPSBuZXcgV2hvbGVzYWxlUHJpY2UoCiAgICAgICAgICAgICAgICBuZXcgRG91YmxlUHJpY2UoCiAgICAgICAgICAgICAgICAgICAgbmV3IFdob2xlc2FsZVByaWNlKAogICAgICAgICAgICAgICAgICAgICAgICBuZXcgRG91YmxlUHJpY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUHJpbWVQcmljZSgxMjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICw4MAogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLDIwMAogICAgICAgICAgICAgICAgKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHJpY2UuZ2V0VmFsdWUoKSk7CiAgICAgICAgcHJpY2Uuc2V0VmFsdWUoMTAwKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ocHJpY2UuZ2V0VmFsdWUoKSk7CiAgICB9Cn0=