/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
class Product
{
public void buy( Market m)
{
System .
out .
println ( "Search a product in market" ) ; }
public void buy( Shop s)
{
System .
out .
println ( "Search a product in shop" ) ; }
}
class Mobile extends Product
{
public void buy( Market m)
{
System .
out .
println ( "Search a mobile in market" ) ; }
public void buy( Shop s)
{
System .
out .
println ( "Search a mobile in shop" ) ; }
}
class Market
{
public void buy( Product product)
{
product.buy ( this ) ;
}
}
class Shop extends Market
{
public void buy( Product product)
{
product.buy ( this ) ;
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System .
out .
println ( "Initial example" ) ; Market market = new Market( ) ;
Market shop = new Shop( ) ;
market.buy ( new Product( ) ) ;
shop.buy ( new Mobile( ) ) ;
Product p1 = new Product( ) ;
Product p2 = new Mobile( ) ;
System .
out .
println ( "New example" ) ; shop.buy ( p1) ;
shop.buy ( p2) ;
p1 = p2;
shop.buy ( p1) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgoKY2xhc3MgUHJvZHVjdAp7CglwdWJsaWMgdm9pZCBidXkoTWFya2V0IG0pCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZWFyY2ggYSBwcm9kdWN0IGluIG1hcmtldCIpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGJ1eShTaG9wIHMpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZWFyY2ggYSBwcm9kdWN0IGluIHNob3AiKTsKICAgIH0KCn0KCmNsYXNzIE1vYmlsZSBleHRlbmRzIFByb2R1Y3QKewoJcHVibGljIHZvaWQgYnV5KE1hcmtldCBtKQogICAgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2VhcmNoIGEgbW9iaWxlIGluIG1hcmtldCIpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGJ1eShTaG9wIHMpCiAgICB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTZWFyY2ggYSBtb2JpbGUgaW4gc2hvcCIpOwogICAgfQoKfQoKY2xhc3MgTWFya2V0CnsKICAgIHB1YmxpYyB2b2lkIGJ1eShQcm9kdWN0IHByb2R1Y3QpCiAgICB7CiAgICAgICAgcHJvZHVjdC5idXkgKHRoaXMpOwogICAgfQp9CgpjbGFzcyBTaG9wIGV4dGVuZHMgTWFya2V0CnsKICAgIHB1YmxpYyB2b2lkIGJ1eShQcm9kdWN0IHByb2R1Y3QpCiAgICB7CiAgICAgICAgcHJvZHVjdC5idXkgKHRoaXMpOwogICAgfQp9CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBleGFtcGxlIik7CgkJTWFya2V0IG1hcmtldCA9IG5ldyBNYXJrZXQoKTsKCQlNYXJrZXQgc2hvcCA9IG5ldyBTaG9wKCk7CgoJCW1hcmtldC5idXkobmV3IFByb2R1Y3QoKSk7CgkJc2hvcC5idXkobmV3IE1vYmlsZSgpKTsKICAgICAgICAgICAgCVByb2R1Y3QgcDEgPSBuZXcgUHJvZHVjdCgpOyAKCQlQcm9kdWN0IHAyID0gbmV3IE1vYmlsZSgpOyAgICAKICAgCiAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJOZXcgZXhhbXBsZSIpOwoJCXNob3AuYnV5KHAxKTsKCQlzaG9wLmJ1eShwMik7CgkJcDEgPSBwMjsKCQlzaG9wLmJ1eShwMSk7CgoJfQp9