seen = [] szint = [] graf = [] n, m, s = 0, 0, 0 def Init(): for _ in range(n*m): l = [] graf.append(l) seen.append(False) szint.append(0) def Check(): for i in range(n): print ''.join(matrix[i][j] for j in range(m)) def Check2(): for i in range(n*m): print ''.join(str(graf[i][j]) for j in range(len(graf[i]))) def ElvagoEl(x, sz): seen[x] = True szint[x] = sz rfminvm = 1000000 uminvm = 0 global s for i in range(len(graf[x])): if not seen[graf[x][i]]: uminvm = ElvagoEl(graf[x][i], sz+1) if uminvm <= szint[x]: if uminvm < rfminvm: rfminvm = uminvm if seen[graf[x][i]]: if szint[graf[x][i]] < szint[x]-1: if szint[graf[x][i]] < rfminvm: rfminvm = szint[graf[x][i]] if rfminvm != 1000000: s+=1 return rfminvm if __name__ == '__main__': matrix = [] ch = raw_input().split(' ') n = int(ch[0]) m = int(ch[1]) for i in range(n): l = [] ch = raw_input() for j in range(m): l.append(ch[j]) matrix.append(l) Init() for i in range(n-1): for j in range(m-1): if matrix[i][j] == '1' and matrix[i+1][j] == '1': graf[i*m+j].append((i+1)*m+j) graf[(i+1)*m+j].append(i*m+j) if matrix[i][j] == '1' and matrix[i][j+1] == '1': graf[i*m+j].append(i*m+j+1) graf[i*m+j+1].append(i*m+j) for i in range(n-1): if matrix[i][m-1] == '1' and matrix[i+1][m-1] == '1': graf[i*m+m-1].append((i+1)*m+m-1) graf[(i+1)*m+m-1].append(i*m+m-1) for j in range(m-1): if matrix[n-1][j] == '1' and matrix[n-1][j+1] == '1': graf[(n-1)*m+j].append((n-1)*m+j+1) graf[(n-1)*m+j+1].append((n-1)*m+j) for i in range(n*m): if not seen[i] and len(graf[i]) > 0: ElvagoEl(i, 0); print s