/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main
(String[] args
) { Player player = new Player();
for (int i = 0; i < 10; i++) {
GameObject go = random.nextBoolean() ? new Chest() : new NPC();
go.accept(player);
}
}
}
class Player {
void handle(Chest c) {
System.
out.
println("opening a chest"); }
public void handle(NPC npc) {
System.
out.
println("meeting NPC"); }
}
abstract class GameObject {
abstract void accept(Player p);
}
class Chest extends GameObject {
@Override void accept(Player p) {
p.handle(this);
}
}
class NPC extends GameObject {
@Override void accept(Player p) {
p.handle(this);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBQbGF5ZXIgcGxheWVyID0gbmV3IFBsYXllcigpOwogICAgICAgIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CiAgICAgICAgICAgIEdhbWVPYmplY3QgZ28gPSByYW5kb20ubmV4dEJvb2xlYW4oKSA/IG5ldyBDaGVzdCgpIDogbmV3IE5QQygpOwogICAgICAgICAgICBnby5hY2NlcHQocGxheWVyKTsKICAgICAgICB9CiAgICB9Cn0KCmNsYXNzIFBsYXllciB7CiAgICB2b2lkIGhhbmRsZShDaGVzdCBjKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvcGVuaW5nIGEgY2hlc3QiKTsKICAgIH0KICAgIHB1YmxpYyB2b2lkIGhhbmRsZShOUEMgbnBjKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtZWV0aW5nIE5QQyIpOwogICAgfQp9CmFic3RyYWN0IGNsYXNzIEdhbWVPYmplY3QgewogICAgYWJzdHJhY3Qgdm9pZCBhY2NlcHQoUGxheWVyIHApOwp9CmNsYXNzIENoZXN0IGV4dGVuZHMgR2FtZU9iamVjdCB7CiAgICBAT3ZlcnJpZGUgdm9pZCBhY2NlcHQoUGxheWVyIHApIHsKICAgICAgICBwLmhhbmRsZSh0aGlzKTsKICAgIH0KfQpjbGFzcyBOUEMgZXh0ZW5kcyBHYW1lT2JqZWN0IHsKICAgIEBPdmVycmlkZSB2b2lkIGFjY2VwdChQbGF5ZXIgcCkgewogICAgICAgIHAuaGFuZGxlKHRoaXMpOwogICAgfQp9