#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int N,M,Cnt,Sol,P,Ok,inceput; char S[505]; int Mat[505][505]; vector V[2505]; int dx[]= {0,0,-1,1}; int dy[]= {-1,1,0,0}; int Viz[2505]; 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 && *it==inceput) {Ok=1; return;} if(Viz[*it]) continue; Viz[*it]=Viz[nod]+1; DFS(*it); } } int main() { int i,j,k,p=0,a,b; 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; inceput=i; Viz[i]=1; DFS(i); Sol+=Ok; } printf("%d\n",Sol); return 0; }