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; } }; } }