#include<iostream>
#include<fstream>
using namespace std;
void col(int matrix[16][16], int colSpace, int lineSpace, int &SC, int &colPos);
void line(int matrix[16][16], int rowSpece, int lineSpace, int &SL, int &linePos);
void comp(int colSpace, int lineSpace, int SC, int SL, int colPos, int linePos, int matrix[16][16]);
int sumMatrix(int matrix[16][16], int colSpace, int lineSpace);
void show(int matrix[16][16], int colSpace, int lineSpace);
void reading(int matrix[16][16], int &colSpace, int &lineSpace);
void reading(int matrix[16][16], int &colSpace, int &lineSpace)
{
fstream input("flip.in");
input >> lineSpace;
input >> colSpace;
for (int i = 0; i < lineSpace; i++)
{
for (int j = 0; j < colSpace; j++)
{
input >> matrix[i][j];
}
}
input.close();
}
int sumMatrix(int matrixs[16][16], int colSpace, int lineSpace)
{
int Sum = 0;
for (int i = 0; i < lineSpace; i++)
{
for (int j = 0; j < colSpace; j++)
{
Sum += matrixs[i][j];
}
}
return Sum;
}
void col(int matrix[16][16], int colSpace, int lineSpace, int &SC, int &colPos)
{
int orgSum = 0, sumVect[16], i, j;
for (i = 0; i < colSpace; i++)
{
for (j = 0; j < lineSpace; j++)
{
orgSum += matrix[j][i];
}
sumVect[i] = orgSum;
orgSum = 0;
//cout << sumVect[i]<<"/";
}
SC = sumVect[0];
colPos = 0;
for (i = 1; i < colSpace; i++)
{
if (SC > sumVect[i])
{
SC = sumVect[i];
colPos = i;
}
}
}
void line(int matrix[16][16], int colSpace, int lineSpace, int &SL, int &linePos)
{
int orgSum = 0, sumVect[16], i, j;
for (i = 0; i < lineSpace; i++)
{
for (j = 0; j < colSpace; j++)
{
orgSum += matrix[i][j];
}
sumVect[i] = orgSum;
orgSum = 0;
//cout << sumVect[i]<<"/";
}
SL = sumVect[0];
linePos = 0;
for (i = 1; i < colSpace; i++)
{
if (SL > sumVect[i])
{
SL = sumVect[i];
linePos = i;
}
}
}
void show(int matrix[16][16], int colSpace, int lineSpace)
{
for (int i = 0; i < lineSpace; i++)
{
for (int j = 0; j < colSpace; j++)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
void comp(int colSpace, int lineSpace, int SC, int SL, int colPos, int linePos, int matrix[16][16])
{
if (SC < 0 || SL < 0)
{
if (SC < SL)
{
for (int i = 0; i < lineSpace; i++)
{
matrix[i][colPos] = -matrix[i][colPos];
}
}
else
{
for (int i = 0; i < colSpace; i++)
{
matrix[linePos][i] = -matrix[linePos][i];
}
}
}
else
if (SC < 0)
{
for (int i = 0; i < lineSpace; i++)
{
matrix[i][colPos] = -matrix[i][colPos];
}
}
else
if (SL < 0)
{
for (int i = 0; i < colSpace; i++)
{
matrix[linePos][i] = -matrix[linePos][i];
}
}
}
int main()
{
int orgMatrix[16][16], cols=0, lines=0,colSum,cPos,lineSum,lPos,theSum=0;
bool Ok = false;
reading(orgMatrix, cols, lines);
//show(orgMatrix, cols, lines);
col(orgMatrix, cols, lines, colSum, cPos);
line(orgMatrix, cols, lines, lineSum, lPos);
//cout<<"Stuff" << colSum << " " << cPos << endl;
//cout <<"NEXT"<< lineSum << " " << lPos << endl;
theSum=sumMatrix(orgMatrix, cols, lines);
comp(cols, lines, colSum, lineSum, cPos, lPos, orgMatrix);
cout << sumMatrix(orgMatrix, cols, lines)<<endl;
cout << endl;
while (!Ok){
if (theSum < sumMatrix(orgMatrix, cols, lines))
{
theSum = sumMatrix(orgMatrix, cols, lines);
cout << endl;
col(orgMatrix, cols, lines, colSum, cPos);
line(orgMatrix, cols, lines, lineSum, lPos);
//cout << "Stuff" << colSum << " " << cPos << endl;
//cout << "NEXT" << lineSum << " " << lPos << endl;
comp(cols, lines, colSum, lineSum, cPos, lPos, orgMatrix);
}
else
{
//show(orgMatrix, cols, lines);
Ok = true;
}
}
ofstream out("flip.out");
out << sumMatrix(orgMatrix, cols, lines);
out.close();
return 0;
}