class Shape { Shape(){ super(()); } Shape(){ super(()); } }class Circle { Circle(){ super(()); } Circle(){ super(()); } }class Rectangle { Rectangle(){ super(()); } Rectangle(){ super(()); } }class TransparentRectangle { TransparentRectangle(){ super(()); } TransparentRectangle(){ super(()); } }class FilledRectangle { FilledRectangle(){ super(()); } FilledRectangle(){ super(()); } }class Square { Square(){ super(()); } Square(){ super(()); } }class WeirdShape { WeirdShape(){ super(()); } WeirdShape(){ super(()); } }class Expr { }class ConstantExpr { java.lang.Integer i; ConstantExpr(java.lang.Integer i){ super(()); this.i = i; } java.lang.Integer i(){ return this.i; } ConstantExpr(java.lang.Integer i){ super(()); this.i = i; } }class PlusExpr { Expr a; Expr b; PlusExpr(Expr a, Expr b){ super(()); this.a = a; this.b = b; } Expr a(){ return this.a; } Expr b(){ return this.b; } PlusExpr(Expr a, Expr b){ super(()); this.a = a; this.b = b; } }class TimesExpr { Expr a; Expr b; TimesExpr(Expr a, Expr b){ super(()); this.a = a; this.b = b; } Expr a(){ return this.a; } Expr b(){ return this.b; } TimesExpr(Expr a, Expr b){ super(()); this.a = a; this.b = b; } }class NegExpr { Expr e; NegExpr(Expr e){ super(()); this.e = e; } Expr e(){ return this.e; } NegExpr(Expr e){ super(()); this.e = e; } }