#include #include #include #include using namespace std; #define FUP(i,a,b) for(int (i)=(a); (i)<=(b); (i)++) #define FORD(i,a,b) for(int (i)=(a); (i)>=(b); (i)--) #define mp make_pair int w[20][20], v[20][20]; int r,c; int dp[20][20][1<<16]; int my; int dx[] = { 1, 0, -1, 0 }; int dy[] = { 0, 1, 0, -1 }; inline void sw (int i, int j) { v[i][j] = (v[i][j]) ? 0 : 1; for (int d = 0; d < 4; d++) { int nr = i + dx[d], nc = j + dy[d]; if (nr < 0 || nc < 0 || nr >= r || nc >= c) continue; v[nr][nc] = (v[nr][nc]) ? 0 : 1; } } int main(){ while(1){ scanf("%d%d",&r,&c); if (r==0&&c==0) break; for (int i = 0; i < r; i++) for (int j = 0; j < c; j++) { char c = 0; while ((c=getchar()) != 'X' && c != '.'); w[i][j] = (c == 'X'); } int res = 1000000000; for (int mask = 0; mask < (1<= 0) res