/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Matrix<Float> m = new Matrix(2, 2);
m.
set(0,
0,
Float.
MAX_VALUE); m.set(0, 1, 42.0f);
m.set(1, 0, null);
m.set(1, 1, 1f);
printMatrix(m);
}
private static void printMatrix(Matrix<?> m) {
for (int row = 0; row < m.rows; row++) {
for (int col = 0; col < m.cols; col++) {
System.
out.
println(m.
get(row, col
)); }
}
}
public static class Matrix<T> {
private final Vector<Vector<T>> data;
public final int rows, cols;
public Matrix(int rows, int cols) {
this.rows = rows;
this.cols = cols;
data = new Vector<>();
data.setSize(rows);
for (int i = 0; i < rows; i++) {
Vector<T> col = new Vector<T>();
col.setSize(cols);
data.set(i, col);
}
}
public T get(int row, int col) {
return data.get(row).get(col);
}
public void set(int row, int col, T val) {
data.get(row).set(col, val);
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCU1hdHJpeDxGbG9hdD4gbSA9IG5ldyBNYXRyaXgoMiwgMik7CgkJbS5zZXQoMCwgMCwgRmxvYXQuTUFYX1ZBTFVFKTsKCQltLnNldCgwLCAxLCA0Mi4wZik7CgkJbS5zZXQoMSwgMCwgbnVsbCk7CgkJbS5zZXQoMSwgMSwgMWYpOwoJCXByaW50TWF0cml4KG0pOwoJfQoJCglwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50TWF0cml4KE1hdHJpeDw/PiBtKSB7CgkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbS5yb3dzOyByb3crKykgewoJCQlmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtLmNvbHM7IGNvbCsrKSB7CgkJCQlTeXN0ZW0ub3V0LnByaW50bG4obS5nZXQocm93LCBjb2wpKTsKCQkJfQoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyBjbGFzcyBNYXRyaXg8VD4gewoJCQoJCXByaXZhdGUgZmluYWwgVmVjdG9yPFZlY3RvcjxUPj4gZGF0YTsKCQlwdWJsaWMgZmluYWwgaW50IHJvd3MsIGNvbHM7CgkJCgkJcHVibGljIE1hdHJpeChpbnQgcm93cywgaW50IGNvbHMpIHsKCQkJdGhpcy5yb3dzID0gcm93czsKCQkJdGhpcy5jb2xzID0gY29sczsKCQkJZGF0YSA9IG5ldyBWZWN0b3I8PigpOwoJCQlkYXRhLnNldFNpemUocm93cyk7CgkJCWZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKSB7CgkJCQlWZWN0b3I8VD4gY29sID0gbmV3IFZlY3RvcjxUPigpOwoJCQkJY29sLnNldFNpemUoY29scyk7CgkJCQlkYXRhLnNldChpLCBjb2wpOwoJCQl9CgkJfQoJCQoJCXB1YmxpYyBUIGdldChpbnQgcm93LCBpbnQgY29sKSB7CgkJCXJldHVybiBkYXRhLmdldChyb3cpLmdldChjb2wpOwoJCX0KCQkKCQlwdWJsaWMgdm9pZCBzZXQoaW50IHJvdywgaW50IGNvbCwgVCB2YWwpIHsKCQkJZGF0YS5nZXQocm93KS5zZXQoY29sLCB2YWwpOwoJCX0KCX0KfQ==