#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef vector VI; typedef vector VII; typedef vector VS; typedef long long lint; typedef long long LL; typedef string ST; #define VAR(v,n) typeof(n) v=(n) #define REP(i,n) for(int i=0; i<(n); i++) #define FOR(i,a,b) for(int i=(a); i<=(b); i++) #define FORD(i,a,b) for(int i=(a); i>=(b); i--) #define FOREACH(i,c) for(VAR(i,(c).begin()); i!=(c).end(); i++) #define PB push_back #define PF push_front #define PI pair #define MP make_pair #define FI first #define SE second #define VR vector #define IT iterator #define ALL(x) (x).begin(),(x).end() #define SIZE(x) ((int)(x).size()) #define CLEAR(c,w) memset(c,w,sizeof(c)) #define M 25 int n,m; char S[M][M]; int T[M][M],W[M][M]; int res,il; int main() { scanf("%d%d",&m,&n); while (m && n) { REP(i,m) scanf("%s",S[i]); REP(i,m) REP(j,n) T[i][j]=(S[i][j]=='X'); res=m*n+1; REP(i,(1<0) W[0][j-1]^=1; W[0][j]^=1; if (j1) W[1][j]^=1; il++; } // solve FOR(j,1,m-1) { REP(k,n) if (W[j-1][k]) { W[j-1][k]^=1; if (k>0) W[j][k-1]^=1; W[j][k]^=1; if (k