static Object[][] multiply(Object[][] x, Object[][] y) {
            Object[][] ret = new Object[x.length][];
            for (int i = 0; i < x.length; i++) {
                ret[i] = new Object[x[i].length];
                for (int j = 0; j < x[i].length; j++) {
                    Object a = x[i][j];
                    Object b = y[i][j];
                    if (a == null || b == null) {
                        ret[i][j] = null;
                    } else if (a instanceof Integer) {
                        ret[i][j] = (Integer) a * (Integer) b;
                    } else if (a instanceof Double) {
                        ret[i][j] = (Double) a * (Double) b;
                    } else {
                        ret[i][j] = ((BigInteger) a).multiply((BigInteger) b);
                    }
                }
            }
            return ret;
        }