#include <iostream>

using namespace std;

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

	// ввод размера матрицы
	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 *sum = new int [rovs]; //массив, хранящий суммы строк матрицы

    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++){
			sum[i] = sum[i] + matrix[i][j];
		}
	}

	max = sum[0]; // переменная для хранения суммы столбцов
    max_rov = 0; // переменная для хранения индекса столбца с максимальной суммой
	//нахождение максимальной суммы
	for (int i = 0; i < rovs; i++){
		if (max > sum[i]){
			max = sum[i];
            max_rov = i;
		}
	}

	// сортировка строки по возрастанию методом пузырька
	for (int i = 0; i < rovs; i++){
		for (int j = 0; j < rovs - 1; j++){
            if (matrix[j][max_rov] > matrix[j + 1][max_rov]){ // если элемент справа меньше текущего, то
                swap(matrix[j][max_rov], matrix[j + 1][max_rov]); // меняем их местами
            }
        }
	}
	
	// вывод матрицы
	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[] sum;
    
	return 0;
}