interface Matrix {
public int getWidth();
public int getHeight();
public A get(int x, int y);
public void set(int x, int y, A a);
default int nCells() { ret getWidth()*getHeight(); }
default L getLine(int y) {
ret new RandomAccessAbstractList() {
public int size() { ret getWidth(); }
public A get(int i) {
ret Matrix.this.get(i, y);
}
public A set(int i, A val) {
A old = Matrix.this.get(i, y);
Matrix.this.set(i, y, val);
ret old;
}
};
}
}