#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define DEBUG 0 int N,M,Cnt,Sol,P,Ok; char S[505]; int Mat[505][505]; vector V[250005]; int dx[]= {0,0,-1,1}; int dy[]= {-1,1,0,0}; int Viz[250005]; void DFS(int nod) { vector::iterator it; for(it=V[nod].begin(); it!=V[nod].end() && Ok==0; it++) { if(Viz[nod]-Viz[*it]>=3 && Viz[*it]==1) { Ok=1; return; } if(Viz[*it]) continue; Viz[*it]=Viz[nod]+1; DFS(*it); } } int main() { int i,j,k,p=0,a,b; #if DEBUG freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif scanf("%d%d",&N,&M); for(i=1; i<=N; i++) { scanf("%s",S+1); for(j=1; j<=M; j++) { Mat[i][j]=S[j]-'0'; if(Mat[i][j]==1) Mat[i][j]=++p; } } for(i=1; i<=N; i++) for(j=1; j<=M; j++) for(k=0; k<4; k++) { a=i+dx[k]; b=j+dy[k]; if(Mat[a][b]) V[Mat[i][j]].push_back(Mat[a][b]); } P=p; for(i=1; i<=P; i++) { memset(Viz,0,sizeof(Viz)); Ok=0; Viz[i]=1; DFS(i); Sol+=Ok; } printf("%d\n",Sol); return 0; }