sealed interface Shape {

    record Square(int side) implements Shape {}
    record Rectangle(int weight, int height) implements Shape {}
    record Circle(int radius) implements Shape {}

    default double area() {
        var area = switch (this) {
            case Square(var side) -> side * side;
            case Rectangle(var weight, var height) -> weight * height;
            case Circle(var radius) -> Math.PI * Math.pow(radius, 2);
        };
        return area;
    }
}
