private Matrix getSubMatrix(Matrix matrix) {
        Stack<Matrix> matrixStack = new Stack<>();
        buildInfo = new ArrayList<>();
        Matrix resultMatrix = matrix.getSubMatrix(0, 0, 1, 1);
        buildInfo.add("Исходная матрица\n" + matrix.toString() + "\nначинаю анализ \n");
        Integer resultCountOfIdenticalElements1 = resultMatrix.countOfIdenticalElements();

        for (int x = 0; x < matrix.data.length; x++)
            for (int y = 0; y < matrix.data[x].length; y++)
                for (int i = 0; i < matrix.data.length; i++) {
                    for (int j = 0; j < matrix.data[i].length; j++) {

                        Matrix subMatrix = null;
                        try {
                            subMatrix = matrix.getSubMatrix(x, y, i + 1, j + 1);
                            if ((subMatrix == null)) {
                                continue;
                            }


                            String s = "Анализирую  " + subMatrix.data[0][0] + ". количество одинаковых элементов= " + subMatrix.countOfIdenticalElements() + "\n" + subMatrix;
                            buildInfo.add(s);
                            if (subMatrix.equals(matrix)) {
                                s = "такая же как исходная матрица, и мы ее пропускаем, иначе не было бы смысла";
                                buildInfo.add(s);
                                continue;
                            }
                            Integer countOfIdenticalElements = subMatrix.countOfIdenticalElements();
                            if (countOfIdenticalElements > resultCountOfIdenticalElements1) {
                                resultCountOfIdenticalElements1 = countOfIdenticalElements;
                                resultMatrix = subMatrix;
                                s = "resultMatrix = \n" + resultMatrix + "\nНашли больше. Теперь количество одинаковых элементов = " + resultMatrix.countOfIdenticalElements() + "*********************";
                                buildInfo.add(s);
                            }

                        } catch (Exception e) {
                        }

                    }
                }
        buildInfo.add("Итоговая матрица \n" + resultMatrix.toString() + "\n" + "Максимальное количество одинаковых элементов = " + resultMatrix.countOfIdenticalElements());
        return resultMatrix;
    }