#include <iostream>

using namespace std;

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

	// ввод размера матрицы
	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;
	}

	if (rovs < cols){
		sort_val = rovs;
	}
	else {
		sort_val = cols;
	}

	int *side_arr = new int [sort_val];

    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;

	// записываем все элементы побочной диагонали в массив
	counter = 0;
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
            if (i + j == sort_val - 1){
				side_arr[counter] = matrix[i][j];
				counter++;
			}
        }
	}

	// сортируем полученный массив
	for (int i = 0; i < sort_val; i++){
		for (int j = 0; j < sort_val - 1; j++){
            if (side_arr[j] > side_arr[j + 1]){ // если элемент справа меньше текущего, то
                swap(side_arr[j], side_arr[j + 1]);
            }
        }
	}

	// меняем элементы побочной диагонали согласно значениям массива
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < cols; j++){
            if (i + j == sort_val - 1){ // если элемент справа меньше текущего, то
                matrix[i][j] = side_arr[i];
            }
        }
	}

	// вывод матрицы
	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;
	delete[] side_arr;
    
	return 0;
}