class Point {

  java.lang.Integer x;
  java.lang.Integer y;
Point(java.lang.Integer x, java.lang.Integer y){
    super(());
    this.x = x;
    this.y = y;
  }
  java.lang.Integer x(){
    return this.x;
  }

  java.lang.Integer y(){
    return this.y;
  }

  Point(java.lang.Integer x, java.lang.Integer y){
    super(());
    this.x = x;
    this.y = y;
  }

}class Shape {

}class ColoredPoint {

  Point pt;
  java.lang.String color;
ColoredPoint(Point pt, java.lang.String color){
    super(());
    this.pt = pt;
    this.color = color;
  }
  Point pt(){
    return this.pt;
  }

  java.lang.String color(){
    return this.color;
  }

  ColoredPoint(Point pt, java.lang.String color){
    super(());
    this.pt = pt;
    this.color = color;
  }

}class Rectangle {

  ColoredPoint upperLeft;
  ColoredPoint lowerRight;
Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight){
    super(());
    this.upperLeft = upperLeft;
    this.lowerRight = lowerRight;
  }
  ColoredPoint upperLeft(){
    return this.upperLeft;
  }

  ColoredPoint lowerRight(){
    return this.lowerRight;
  }

  Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight){
    super(());
    this.upperLeft = upperLeft;
    this.lowerRight = lowerRight;
  }

}class Color {

Color(){
    super(());
  }
  Color(){
    super(());
  }

}class Blue {

Blue(){
    super(());
  }
  Blue(){
    super(());
  }

}class Red {

Red(){
    super(());
  }
  Red(){
    super(());
  }

}class PatternMatching {

PatternMatching(){
    super(());
  }
  void printColorOfUpperLeftPoint(Shape shape){
    switch(shape){
      case Rectangle(ColoredPoint(Point pt, java.lang.String color), ColoredPoint lowerRight):
        System.out.println Signature: [TPH, TPH](x:  op pt.x Signature: [TPH]() op  / color:  op color op  / lowerRight:  op lowerRight);

      default:
        System.out.println Signature: [TPH, TPH](not a rectangle);

    };
    return;
  }

  PatternMatching(){
    super(());
  }

}