#include <iostream>

using namespace std;

int** create_matrix(int rows, int cols) { // создание матрицы
	int** matrix = new int* [rows]; // создание массива matrix с размером rows
	for (int i = 0; i < rows; i++) { // цикл от 0 до rows
		matrix[i] = new int[cols]; // создание массива с размером cols в текущем элементе
	}
	return matrix; // возвращение созданной матрицы
}

void input_matrix_elements(int** matrix, int rows, int cols) { // ввод элементов матрицы
	cout << endl << "Введите элементы матрицы: " << endl;
	for (int i = 0; i < rows; i++) {
		for (int j = 0; j < cols; j++) {
			cin >> matrix[i][j];
		}
		cout << endl;
	}
}

void output_matrix(int** matrix, int rows, int cols) { // вывод элментов матрицы
	for (int i = 0; i < rows; i++) {
		for (int j = 0; j < cols; j++) {
			cout << matrix[i][j] << "\t";
		}
		cout << endl;
	}
}

int** matrix_sort(int** matrix, int rows, int cols) { // сортировка матрицы методом пузырька
	for (int i = 0; i < rows; i++){
		for (int j = 0; j < cols; j++){
			for (int k = 0; k < cols - 1; k++){
				if (matrix[i][k] > matrix[i][k + 1]){
					swap(matrix[i][k], matrix[i][k + 1]);
				}
			}
        }
	}
	return matrix;
}

void delete_matrix(int **matrix, int iterations){ // удаление матрицы
    for (int i = 0; i < iterations; i++){ // цикл от 0 до iterations
        delete[] matrix[i]; // удаление текущего элемента матрицы
    }
    delete[] matrix; // удаление матрицы
}

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

	// ввод размера матрицы 
	cout << "Введите количество строк матрицы: " << endl;
	cin >> rows;

	cout << "Введите количество столбцов матрицы: " << endl;
	cin >> cols;

	// если размер меньше 0, то завершаем программу
	if ((rows < 1) || (cols < 1)) {
		cout << "Размер матрицы не может быть меньше 1x1." << endl;
		return 0;
	}

	// инициализация матрицы с указанными размерами
	int** matrix = create_matrix(rows, cols);

	// ввод матрицы
	input_matrix_elements(matrix, rows, cols);

	// вывод матрицы
	cout << "Введённая матрица: " << endl;
	output_matrix(matrix, rows, cols);

	int** sorted_matrix = matrix_sort(matrix, rows, cols); // получение отсортированной матрицы

    cout << endl << "Отсортированная матрица: " << endl;
    output_matrix(sorted_matrix, rows, cols); // вывод отсортированной матрицы

	delete_matrix(matrix, rows);
	delete_matrix(sorted_matrix, rows);

	return 0;
}