#include <stdio.h>
int main(){
int w, h;
scanf("%d %d", &w, &h);
char arr[w][h+1];
for(int i = 0; i < w; i++){
scanf("%s", &arr[i]);
}
char bw[8][9];
char wb[8][9];
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
if(i % 2 == 0 && j % 2 == 0) { // 0 2 4 6(1,3,5,7)
bw[i][j] == 'B';
wb[i][j] == 'W';
}
else if(i % 2 == 0 && j % 2 == 1) {
bw[i][j] == 'W';
wb[i][j] == 'B';
}
else if(i % 2 == 1 && j % 2 == 0) {
bw[i][j] == 'W';
wb[i][j] == 'B';
}
else {
bw[i][j] == 'B';
wb[i][j] == 'W';
}
}
} // 정의에 따라, 시작이 B인 체스판과 W인 체스판 배열을 만들었음.
int bcount[(w-7)*(h-7)], wcount[(w-7)*(h-7)], p = 0; // 체스판과 판자를 비교했을때 몇 개가 다른지 비교함.
for(int i = 0; i < w - 7; i++){
for(int j = 0; j < h - 7; j++){
for(int k = 0; k < 8; k++){
for(int l = 0; l < 8; l++){
if(bw[k][l] != arr[k+i][l+j]) bcount[p]++;
if(wb[k][l] != arr[k+i][l+j]) wcount[p]++;
}
}
p++;
}
} // 8*8을 기준으로 몇 개의 체스판이 수정되어야 하는지의 개수가 나왔을 것임.
int min = 2500;
for(int i = 0; i < (w-7)*(h-7)-1; i++){
if(min > bcount[i]) min = bcount[i];
if(min > wcount[i]) min = wcount[i];
}
printf("%d", min);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbigpewogICAgaW50IHcsIGg7CiAgICBzY2FuZigiJWQgJWQiLCAmdywgJmgpOwoKICAgIGNoYXIgYXJyW3ddW2grMV07CgogICAgZm9yKGludCBpID0gMDsgaSA8IHc7IGkrKyl7CgkgICAgc2NhbmYoIiVzIiwgJmFycltpXSk7CgkgICAgfQogICAgCiAgICBjaGFyIGJ3WzhdWzldOwogICAgY2hhciB3Yls4XVs5XTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCA4OyBpKyspewoJICAgIGZvcihpbnQgaiA9IDA7IGogPCA4OyBqKyspewoJICAgIAlpZihpICUgMiA9PSAwICYmIGogJSAyID09IDApIHsgLy8gMCAyIDQgNigxLDMsNSw3KQoJICAgIAkJYndbaV1bal0gPT0gJ0InOwoJICAgIAkJd2JbaV1bal0gPT0gJ1cnOwoJICAgIAl9IAoJCSAgICBlbHNlIGlmKGkgJSAyID09IDAgJiYgaiAlIDIgPT0gMSkgewoJCSAgICAJYndbaV1bal0gPT0gJ1cnOwoJCSAgICAJd2JbaV1bal0gPT0gJ0InOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoaSAlIDIgPT0gMSAmJiBqICUgMiA9PSAwKSB7CiAgICAgICAgICAgICAgICBid1tpXVtqXSA9PSAnVyc7CiAgICAgICAgICAgICAgICB3YltpXVtqXSA9PSAnQic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBid1tpXVtqXSA9PSAnQic7CiAgICAgICAgICAgICAgICB3YltpXVtqXSA9PSAnVyc7CiAgICAgICAgICAgIH0KCSAgICB9CiAgICB9IC8vIOygleydmOyXkCDrlLDrnbwsIOyLnOyekeydtCBC7J24IOyytOyKpO2MkOqzvCBX7J24IOyytOyKpO2MkCDrsLDsl7TsnYQg66eM65Ok7JeI7J2MLgogICAgaW50IGJjb3VudFsody03KSooaC03KV0sIHdjb3VudFsody03KSooaC03KV0sIHAgPSAwOyAvLyDssrTsiqTtjJDqs7wg7YyQ7J6Q66W8IOu5hOq1kO2WiOydhOuVjCDrqocg6rCc6rCAIOuLpOuluOyngCDruYTqtZDtlaguCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgdyAtIDc7IGkrKyl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGggLSA3OyBqKyspewoKICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDg7IGsrKyl7CiAgICAgICAgICAgICAgICBmb3IoaW50IGwgPSAwOyBsIDwgODsgbCsrKXsKICAgICAgICAgICAgICAgICAgICBpZihid1trXVtsXSAhPSBhcnJbaytpXVtsK2pdKSBiY291bnRbcF0rKzsKICAgICAgICAgICAgICAgICAgICBpZih3YltrXVtsXSAhPSBhcnJbaytpXVtsK2pdKSB3Y291bnRbcF0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBwKys7ICAgCiAgICAgICAgfQogICAgICAgIAogICAgfSAvLyA4KjjsnYQg6riw7KSA7Jy866GcIOuqhyDqsJzsnZgg7LK07Iqk7YyQ7J20IOyImOygleuQmOyWtOyVvCDtlZjripTsp4DsnZgg6rCc7IiY6rCAIOuCmOyZlOydhCDqsoPsnoQuCiAgICAKICAgIGludCBtaW4gPSAyNTAwOwogICAgCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgKHctNykqKGgtNyktMTsgaSsrKXsKICAgICAgICBpZihtaW4gPiBiY291bnRbaV0pIG1pbiA9IGJjb3VudFtpXTsKICAgICAgICBpZihtaW4gPiB3Y291bnRbaV0pIG1pbiA9IHdjb3VudFtpXTsKICAgIH0KICAgIAogICAgcHJpbnRmKCIlZCIsIG1pbik7CiAgICByZXR1cm4gMDsKfQ==
MTAgMTMKQkJCQkJCQkJXQldCVwpCQkJCQkJCQkJXQldCCkJCQkJCQkJCV0JXQlcKQkJCQkJCQkJCV0JXQgpCQkJCQkJCQldCV0JXCkJCQkJCQkJCQldCV0IKQkJCQkJCQkJXQldCVwpCQkJCQkJCQkJXQldCCldXV1dXV1dXV1dCV0IKV1dXV1dXV1dXV0JXQg==
10 13
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
BBBBBBBBWBWBW
BBBBBBBBBWBWB
WWWWWWWWWWBWB
WWWWWWWWWWBWB