/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
abstract class Node {
abstract double evaluate();
}
class ValueNode extends Node {
double value;
public ValueNode(double value) {
this.value = value;
}
double evaluate() {
return value;
}
}
abstract class OpNode extends Node {
Node left;
Node right;
public OpNode(Node left, Node right) {
this.left = left;
this.right = right;
}
}
class MultiplicationNode extends OpNode {
public MultiplicationNode(Node left, Node right) {
super(left, right);
}
@Override
double evaluate() {
return left.evaluate() * right.evaluate();
}
}
class AdditionNode extends OpNode {
public AdditionNode(Node left, Node right) {
super(left, right);
}
@Override
double evaluate() {
return left.evaluate() + right.evaluate();
}
}
class Ideone
{
{
Node node = new AdditionNode(
new ValueNode(1),
new MultiplicationNode(
new ValueNode(2),
new ValueNode(3)
)
);
System.
out.
println(node.
evaluate()); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgphYnN0cmFjdCBjbGFzcyBOb2RlIHsKCWFic3RyYWN0IGRvdWJsZSBldmFsdWF0ZSgpOwp9CgpjbGFzcyBWYWx1ZU5vZGUgZXh0ZW5kcyBOb2RlIHsKCWRvdWJsZSB2YWx1ZTsKCQoJcHVibGljIFZhbHVlTm9kZShkb3VibGUgdmFsdWUpIHsKCQl0aGlzLnZhbHVlID0gdmFsdWU7Cgl9CgkKCWRvdWJsZSBldmFsdWF0ZSgpIHsKCQlyZXR1cm4gdmFsdWU7Cgl9Cn0KCmFic3RyYWN0IGNsYXNzIE9wTm9kZSBleHRlbmRzIE5vZGUgewoJTm9kZSBsZWZ0OwoJTm9kZSByaWdodDsKCQoJcHVibGljIE9wTm9kZShOb2RlIGxlZnQsIE5vZGUgcmlnaHQpIHsKCQl0aGlzLmxlZnQgPSBsZWZ0OwoJCXRoaXMucmlnaHQgPSByaWdodDsKCX0KfQoKY2xhc3MgTXVsdGlwbGljYXRpb25Ob2RlIGV4dGVuZHMgT3BOb2RlIHsKCXB1YmxpYyBNdWx0aXBsaWNhdGlvbk5vZGUoTm9kZSBsZWZ0LCBOb2RlIHJpZ2h0KSB7CgkJc3VwZXIobGVmdCwgcmlnaHQpOwoJfQoJCglAT3ZlcnJpZGUKCWRvdWJsZSBldmFsdWF0ZSgpIHsKCQlyZXR1cm4gbGVmdC5ldmFsdWF0ZSgpICogcmlnaHQuZXZhbHVhdGUoKTsKCX0KfQoKY2xhc3MgQWRkaXRpb25Ob2RlIGV4dGVuZHMgT3BOb2RlIHsKCXB1YmxpYyBBZGRpdGlvbk5vZGUoTm9kZSBsZWZ0LCBOb2RlIHJpZ2h0KSB7CgkJc3VwZXIobGVmdCwgcmlnaHQpOwoJfQoJCglAT3ZlcnJpZGUKCWRvdWJsZSBldmFsdWF0ZSgpIHsKCQlyZXR1cm4gbGVmdC5ldmFsdWF0ZSgpICsgcmlnaHQuZXZhbHVhdGUoKTsKCX0KfQoKY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCU5vZGUgbm9kZSA9IG5ldyBBZGRpdGlvbk5vZGUoCgkJICAgIG5ldyBWYWx1ZU5vZGUoMSksCgkJICAgIG5ldyBNdWx0aXBsaWNhdGlvbk5vZGUoCgkJICAgICAgICBuZXcgVmFsdWVOb2RlKDIpLAoJCSAgICAgICAgbmV3IFZhbHVlTm9kZSgzKQoJCSAgICApCgkJKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4obm9kZS5ldmFsdWF0ZSgpKTsKCX0KfQ==