#include <iostream>

using namespace std;

int main(){
	int rovs, cols; // строки и столбцы матрицы

	// ввод размера матрицы
	cout << "Input rovs of matrix: " << endl;
	cin >> rovs;

	cout << "Input cols of matrix: " << endl;
	cin >> cols;

	if ((rovs < 1) || (cols < 1)){
		cout << "Size cannot be less than 1.";
		return 0;
	}

    int **matrix = new int *[rovs]; //матрица
	for (int i = 0; i < rovs; i++){
		matrix[i] = new int [cols];
	}

	cout << "Input matrix's elements:" << endl;
	// ввод матрицы
    for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
            cin >> matrix[i][j];
        }
	}

	cout << "-------------" << endl;
	// вывод матрицы
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
			cout << matrix[i][j] << "\t";
        }
		cout << endl;
	}

	cout << "-------------" << endl;
	// сортировка матрицы по возрастанию методом пузырька
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
			if (i == j){ // если элемент принадлежит главной диагонали (его значения строк и столбцов совпадают)
				if (rovs < cols){ // если строк меньше чем столбцов, то сортируем по количеству строк
					for (int k = 0; k < rovs - 1; k++){
						if (matrix[k][k] > matrix[k + 1][k + 1]){ // если элемент справа меньше текущего, то
							swap(matrix[k][k], matrix[k + 1][k + 1]); // меняем их местами
						}
					}
				}
				else { // иначе сортируем по количеству строк
					for (int k = 0; k < cols - 1; k++){
						if (matrix[k][k] > matrix[k + 1][k + 1]){ // если элемент справа меньше текущего, то
							swap(matrix[k][k], matrix[k + 1][k + 1]); // меняем их местами
						}
					}
				}
			}
        }
	}

	// вывод матрицы
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
			cout << matrix[i][j] << "\t";
        }
		cout << endl;
	}

    for (int i = 0; i < rovs; i++){
		delete[] matrix[i];
	}

    delete[] matrix;
    
	return 0;
}