#include<stdio.h>
#include <queue>
#include <stdlib.h>
using namespace std;
struct POS{
int row_no;
int col_no;
};
queue<POS> Q;
POS get_POS(int row,int col){
POS p;
p.row_no = row;
p.col_no = col;
return p;
}
void FILL_PIXELS(char filename[10]){
FILE *p = fopen(filename,"r");
if(p==NULL)
exit(1);
//while()
int rows=0,cols=0;
fscanf(p,"%d %d\n",&rows,&cols);
char array[rows][cols+1];
//fflush(stdin);
int i=0;
for(;i<rows-1;i++){
fgets(array[i],cols+2,p);//fgets(array[i],cols,stdin);
//printf("%3d %s",i,array[i]);
}
fgets(array[i],cols+1,p);
//printf("%s\n",array[i]);
//char queue[rows*cols];
fclose(p);
int no_of_fills=0;
for(int i=0;i<rows;i++){
//printf("%d\n",i);
for(int j=0;j<cols;j++){
if(array[i][j] == '0'){
no_of_fills++;
POS p;
p.row_no = i;
p.col_no = j;
//array[i][j] = '1';
Q.push(p);
array[i][j] = '1';
while(!Q.empty()){
POS p = Q.front();
Q.pop();
int x = p.row_no;
int y = p.col_no;
//array[x][y] = '1';
//printf("%3d,%3d\n",x,y);
if(x>0 && y>0 && array[x-1][y-1] == '0'){
Q.push(get_POS(x-1,y-1));
array[x-1][y-1] = '1';
}
if(x>0 && array[x-1][y]=='0'){
Q.push(get_POS(x-1,y));
array[x-1][y] = '1';
}
if(x>0 && y<(cols-1) && array[x-1][y+1]=='0'){
Q.push(get_POS(x-1,y+1));
array[x-1][y+1] = '1';
}
if(y>0 && array[x][y-1]=='0'){
Q.push(get_POS(x,y-1));
array[x][y-1] = '1';
}
if(y<(cols-1) && array[x][y+1]=='0'){
Q.push(get_POS(x,y+1));
array[x][y+1] = '1';
}
if(y>0 && x<(rows-1) && array[x+1][y-1]=='0'){
Q.push(get_POS(x+1,y-1));
array[x+1][y-1] = '1';
}
if(x<(rows-1) && array[x+1][y]=='0'){
Q.push(get_POS(x+1,y));
array[x+1][y] = '1';
}
if(x<(rows-1) && y<(cols-1) && array[x+1][y+1]=='0'){
Q.push(get_POS(x+1,y+1));
array[x+1][y+1] = '1';
}
}
}
}
}
/*p = fopen("a.out","w");
fprintf(p,"%d",no_of_fills);
fclose(p);*/
printf("%d\n",no_of_fills);
}
int main(int argc,char **argv){
FILL_PIXELS(argv[1]);
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8c3RkbGliLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFBPU3sKCWludCByb3dfbm87CglpbnQgY29sX25vOwp9OwoKcXVldWU8UE9TPiBROwoKUE9TIGdldF9QT1MoaW50IHJvdyxpbnQgY29sKXsKCVBPUyBwOwoJcC5yb3dfbm8gPSByb3c7CglwLmNvbF9ubyA9IGNvbDsKCXJldHVybiBwOwp9Cgp2b2lkIEZJTExfUElYRUxTKGNoYXIgZmlsZW5hbWVbMTBdKXsKCUZJTEUgKnAgPSBmb3BlbihmaWxlbmFtZSwiciIpOwoJaWYocD09TlVMTCkKCQlleGl0KDEpOwoJLy93aGlsZSgpCglpbnQgcm93cz0wLGNvbHM9MDsKCWZzY2FuZihwLCIlZCAlZFxuIiwmcm93cywmY29scyk7CgljaGFyIGFycmF5W3Jvd3NdW2NvbHMrMV07CgkvL2ZmbHVzaChzdGRpbik7CglpbnQgaT0wOwoJZm9yKDtpPHJvd3MtMTtpKyspewoJCWZnZXRzKGFycmF5W2ldLGNvbHMrMixwKTsvL2ZnZXRzKGFycmF5W2ldLGNvbHMsc3RkaW4pOwoJCS8vcHJpbnRmKCIlM2QgJXMiLGksYXJyYXlbaV0pOwoJfQoJZmdldHMoYXJyYXlbaV0sY29scysxLHApOwoJLy9wcmludGYoIiVzXG4iLGFycmF5W2ldKTsKCS8vY2hhciBxdWV1ZVtyb3dzKmNvbHNdOwoJZmNsb3NlKHApOwoJaW50IG5vX29mX2ZpbGxzPTA7Cglmb3IoaW50IGk9MDtpPHJvd3M7aSsrKXsKCQkvL3ByaW50ZigiJWRcbiIsaSk7CgkJZm9yKGludCBqPTA7ajxjb2xzO2orKyl7CgkJCWlmKGFycmF5W2ldW2pdID09ICcwJyl7CgkJCQlub19vZl9maWxscysrOwoJCQkJUE9TIHA7CgkJCQlwLnJvd19ubyA9IGk7CgkJCQlwLmNvbF9ubyA9IGo7CgkJCQkvL2FycmF5W2ldW2pdID0gJzEnOwoJCQkJUS5wdXNoKHApOwoJCQkJYXJyYXlbaV1bal0gPSAnMSc7CgkJCQl3aGlsZSghUS5lbXB0eSgpKXsKCQkJCQlQT1MgcCA9IFEuZnJvbnQoKTsKCQkJCQlRLnBvcCgpOwoJCQkJCWludCB4ID0gcC5yb3dfbm87CgkJCQkJaW50IHkgPSBwLmNvbF9ubzsKCQkJCQkvL2FycmF5W3hdW3ldID0gJzEnOwoJCQkJCS8vcHJpbnRmKCIlM2QsJTNkXG4iLHgseSk7CgkJCQkJaWYoeD4wICYmIHk+MCAmJiBhcnJheVt4LTFdW3ktMV0gPT0gJzAnKXsKCQkJCQkJUS5wdXNoKGdldF9QT1MoeC0xLHktMSkpOwoJCQkJCQlhcnJheVt4LTFdW3ktMV0gPSAnMSc7CgkJCQkJfQoJCQkJCWlmKHg+MCAmJiBhcnJheVt4LTFdW3ldPT0nMCcpewoJCQkJCQlRLnB1c2goZ2V0X1BPUyh4LTEseSkpOwoJCQkJCQlhcnJheVt4LTFdW3ldID0gJzEnOwoJCQkJCX0KCQkJCQlpZih4PjAgJiYgeTwoY29scy0xKSAmJiBhcnJheVt4LTFdW3krMV09PScwJyl7CgkJCQkJCVEucHVzaChnZXRfUE9TKHgtMSx5KzEpKTsKCQkJCQkJYXJyYXlbeC0xXVt5KzFdID0gJzEnOwoJCQkJCX0KCQkJCQlpZih5PjAgJiYgYXJyYXlbeF1beS0xXT09JzAnKXsKCQkJCQkJUS5wdXNoKGdldF9QT1MoeCx5LTEpKTsKCQkJCQkJYXJyYXlbeF1beS0xXSA9ICcxJzsKCQkJCQl9CgkJCQkJaWYoeTwoY29scy0xKSAmJiBhcnJheVt4XVt5KzFdPT0nMCcpewoJCQkJCQlRLnB1c2goZ2V0X1BPUyh4LHkrMSkpOwoJCQkJCQlhcnJheVt4XVt5KzFdID0gJzEnOwoJCQkJCX0KCQkJCQlpZih5PjAgJiYgeDwocm93cy0xKSAmJiBhcnJheVt4KzFdW3ktMV09PScwJyl7CgkJCQkJCVEucHVzaChnZXRfUE9TKHgrMSx5LTEpKTsKCQkJCQkJYXJyYXlbeCsxXVt5LTFdID0gJzEnOwoJCQkJCX0KCQkJCQlpZih4PChyb3dzLTEpICYmICBhcnJheVt4KzFdW3ldPT0nMCcpewoJCQkJCQlRLnB1c2goZ2V0X1BPUyh4KzEseSkpOwoJCQkJCQlhcnJheVt4KzFdW3ldID0gJzEnOwoJCQkJCX0KCQkJCQlpZih4PChyb3dzLTEpICYmIHk8KGNvbHMtMSkgJiYgYXJyYXlbeCsxXVt5KzFdPT0nMCcpewoJCQkJCQlRLnB1c2goZ2V0X1BPUyh4KzEseSsxKSk7CgkJCQkJCWFycmF5W3grMV1beSsxXSA9ICcxJzsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9CgkvKnAgPSBmb3BlbigiYS5vdXQiLCJ3Iik7CglmcHJpbnRmKHAsIiVkIixub19vZl9maWxscyk7CglmY2xvc2UocCk7Ki8KCXByaW50ZigiJWRcbiIsbm9fb2ZfZmlsbHMpOwp9CgoKaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpewoJRklMTF9QSVhFTFMoYXJndlsxXSk7Cn0=