#include #include #include #include #include #include using namespace std; #define PRINTF(args...) printf(args) //#define PRINTF(args...) #define FOR(i,a,b) for(int i=(a); i<(int)(b); ++i) #define FORD(i,a,b) for(int i=(a)-1; i>=(int)(b); --i) #define FOREACH(i,C) for(__typeof(C.begin()) i=C.begin(); i!=C.end(); ++i) const int nMax = 17; char tab[nMax][nMax]; char tabA[nMax][nMax]; int n,m; const int INF = 1000000000; void change(int x, int y) { FOR(i,-1,2) FOR(j,-1,2) if(abs(i)+abs(j)<2 && x+i=0 && y+j=0) tab[x+i][y+j] = 1-tab[x+i][y+j]; } bool testcase() { scanf("%d %d",&n,&m); if(n==0 && m==0) return false; FOR(i,0,n) scanf("%s",tabA[i]); if(m>n) { FOR(i,0,n) FOR(j,0,m) tab[j][i] = tabA[i][j]; swap(n,m); FOR(i,0,n) FOR(j,0,m) tabA[i][j] = tab[i][j]; } int best = INF; FOR(mask,0,(1<