#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX(a,b) ((a)>(b) ? (a) : (b))
#define MIN(a,b) ((a)>(b) ? (b) : (a))
int compute(int **matrix, int l, int c, int swv, int swh)
{
int i, j;
// Compute sum
int sum = 0;
for (i = 0; i < l; i++) {
for (j = 0; j < c; j++) {
int swl = ((swv & i) == 0) ? 1 : -1;
int swc = ((swh & j) == 0) ? 1 : -1;
sum += matrix[i][j]*swl*swc;
}
}
return sum;
}
int maxsum(int **matrix, int max, int *swv, int *swh, int l, int c)
{
int i, j;
int sum = 0;
for (i = 0; i < pow(2, c); i++) {
for (j = 0; j < l; j++) {
int ts = compute(matrix, l, c, i, j);
sum = MAX(sum, ts);
}
}
// Search for other situations
return sum;
}
int main()
{
FILE *frd = fopen("flip.in", "r");
FILE *fwd = fopen("flip.out", "w+");
int val1, val2, r;
int i, j;
r = fscanf (frd, "%d", &val1);
r = fscanf (frd, "%d", &val2);
int **matrix = malloc(val1*sizeof(int *));
for (i = 0; i < val1; i++) {
matrix[i] = (int *)malloc(val2*sizeof(int));
}
for (i = 0; i < val1; i++) {
for (j = 0; j < val2; j++) {
fscanf (frd, "%d", &matrix[i][j]);
}
}
int swv[val1];
int swh[val2];
for (i = 0; i < val1; i++) {
swv[i] = 1;
}
for (i = 0; i < val2; i++) {
swh[i] = 1;
}
//printf("max: %d", maxsum(matrix, 0, swv, swh, val1, val2));
fprintf(fwd, "%d", maxsum(matrix, 0, swv, swh, val1, val2));
fclose(frd);
fclose(fwd);
return 0;
}