#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 < cols; i++){
		for (int j = 0; j < rovs; j++){
			for (int k = 0; k < rovs - 1; k++){
				if (matrix[k][i] < matrix[k + 1][i]){
					swap(matrix[k][i], matrix[k + 1][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;

	return 0;
}