#include <cstdio>
#include <list>
using namespace std;
int sum(int (*matr)[16], int &row, int &line);
void back_row(int (*matr)[16], int &row, int &line, int index, list<int> &solution);
void back_line(int (*matr)[16], int &row, int &line, int index, list<int> &solution);
void flip(int (*matr)[16], int &row, int &line, int index, char c);
int main()
{
int matr[16][16];
int row;
int line;
list<int> solution;
int min = 0;
FILE *input = fopen("flip.in", "r");
FILE *output = fopen("flip.out", "w");
if (input != NULL) {
fscanf(input, "%d %d", &row, &line);
for (int i = 0; i < row; i++) {
for (int j = 0; j < line; j++) {
fscanf(input, "%d", &matr[i][j]);
}
}
}
back_row(matr, row, line, 0, solution);
for (list<int>::iterator it = solution.begin(); it != solution.end(); it++) {
if (*it > min) {
min = *it;
}
}
fprintf(output, "%d", min);
return 0;
}
int sum(int (*matr)[16], int &row, int &line)
{
int tempSum = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < line; j++) {
tempSum += matr[i][j];
}
}
return tempSum;
}
void back_row(int (*matr)[16], int &row, int &line, int index, list<int> &solution)
{
if (index == row) {
back_line(matr, row, line, 0, solution);
return;
}
back_row(matr, row, line, index + 1, solution);
flip(matr, row, line, index, 'r');
back_row(matr, row, line, index + 1, solution);
}
void back_line(int (*matr)[16], int &row, int &line, int index, list<int> &solution)
{
if (index == line) {
solution.push_back(sum(matr, row, line));
return;
}
back_line(matr, row, line, index + 1, solution);
flip(matr, row, line, index, 'l');
back_line(matr, row, line, index + 1, solution);
}
void flip(int (*matr)[16], int &row, int &line, int index, char c)
{
switch (c) {
case 'r':
for (int i = 0; i < row; i++) {
matr[i][index] *= -1;
}
break;
case 'l':
for (int i = 0; i < line; i++) {
matr[index][i] *= -1;
}
break;
}
}