#include <stdio.h>
#include <stdlib.h>
int i;
int flip(int** a,int n,int m,int max,int n1)
{
if(n1<=n)
{
int i,j,s=0,max2=0;
for(i=n1; i<n; i++)
{
for(j=0; j<m; j++)
{
s=s+a[i][j];
}
if (s<0)
{
for(j=0; j<m; j++)
{
a[i][j]*=-1;
}
}
max=flip(a,n,m,max,n1+1);
max=flip2(a,n,m,max,0);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
max2+=a[i][j];
}
}
if (max2>max)
{
max=max2;
}
return max;
}
}
}
int flip2(int** a,int n,int m,int max,int m1)
{
if (m1<=m)
{
int i,j,s=0,max2=0;
for(j=m1; j<m; j++)
{
for (i=0; i<n; i++)
{
s=s+a[i][j];
}
if (s<0)
{
for(i=0; i<n; i++)
{
a[i][j]*=-1;
}
}
max=flip2(a,n,m,max,m1+1);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
max2+=a[i][j];
}
}
if (max2>max)
{
max=max2;
}
return max;
}
}
}
int** Create(int n,int m)
{
int **tb;
tb=(int**)malloc(n*sizeof(int*));
for(i=0; i<n; i++)
{
tb[i]=(int*)malloc(m*sizeof(int));
}
return tb;
}
void Destroy(int**tb,int n)
{
for (i=0; i<n; i++)
{
free(tb[i]);
}
free(tb);
}
int main()
{
FILE *in,*out;
in=fopen("flip.in","rt");
out=fopen("flip.out","wt");
int n,m,i,j,**tb,max=0;
fscanf(in,"%i%i",&n,&m);
tb=Create(n,m);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
fscanf(in,"%i",&tb[i][j]);
max+=tb[i][j];
}
}
max=flip(tb,n,m,max,0);
fprintf(out,"%i",max);
fclose(in);
fclose(out);
Destroy(tb,n);
return 0;
}