import java.util.*;

abstract class Shape {
    public abstract void draw(Canvas c);
}

class Circle extends Shape {
    private int x, y, radius;
    public void draw(Canvas c) {
        // drawing circle
    }
}

class Rectangle extends Shape {
    private int x, y, width, height;
    public void draw(Canvas c) {
        // drawing rectangle
    }
}

class Canvas {
    public void draw(Shape s) {
        s.draw(this);
    }

/*
    public void drawAll(List<Shape> shapes) {     // not polymorphic enough
    public void drawAll(List<?> shapes) {         // too polymorphic (w)
    public <T> void drawAll(List<T> shapes) {     // too polymorphic (g)
       for (Shape s: shapes) {
          s.draw(this);
       }
    }
*/

}