#include <stdio.h>
void*** Dio=NULL;
struct S
{
int poz;
int neg;
};
void readmatrix(int N, int M, int A[N][M], FILE* fp)
{
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
{
fscanf(fp, "%d ", &A[i][j]);
}
}
}
void testmatrix(int N, int M, int A[N][M])
{
printf("\n");
for(int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
printf("%d ", A[i][j]);
printf("\n");
}
}
void swap(int N, int M, int A[N][M], int k, int type)
{
if (type == 0) // then switch line
for (int j = 0; j < M; ++j) A[k][j] *= -1;
if (type == 1) // then switch column
for (int i = 0; i < N; ++i) A[i][k] *= -1;
}
int sum(int N, int M, int A[N][M])
{
int sum = 0;
for (int i = 0; i < N; ++i)
for (int j = 0; j < M; ++j)
sum += A[i][j];
return sum;
}
int main()
{
FILE* fp;
fp = fopen("flip.in", "r");
int N, M;
fscanf(fp, "%d %d", &N, &M);
int A[N][M];
readmatrix(N, M, A, fp);
// initialise structure values
struct S Lin[N], Col[M];
for (int i = 0; i < N; ++i) Lin[i].poz = Lin[i].neg = 0;
for (int j = 0; j < M; ++j) Col[j].poz = Col[j].neg = 0;
// algorithm
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < M; ++j)
if (A[i][j] > 0) Lin[i].poz += A[i][j];
else if (A[i][j] < 0) Lin[i].neg += (-A[i][j]);
if (Lin[i].poz < Lin[i].neg) swap(N, M, A, i, 0);
}
for (int j = 0; j < M; ++j)
{
for (int i = 0; i < N; ++i)
if (A[i][j] > 0) Col[j].poz += A[i][j];
else if (A[i][j] < 0) Col[j].neg += (-A[i][j]);
if (Col[j].poz < Col[j].neg) swap(N, M, A, j, 1);
}
fclose(fp);
fp = fopen("flip.out", "w");
fprintf(fp, "%d\n", sum(N,M,A));
return 0;
}