def graph(): n = int(input()) e = int(input()) graph = [[] for i in range(n)] for i in range(e): k = list(map(int, input().split())) graph[k[0]].append(k[1]) graph[k[1]].append(k[0]) return graph
def graph(): n = int(input()) e = int(input()) graph = [[] for i in range(n)] for i in range(e): k = list(map(int, input().split())) graph[k[0]].append(k[1]) graph[k[1]].append(k[0]) return graph
def dfs(graph, s): global seen seen.add(s) print(s) for i in graph[s]: if i not in seen: seen.add(i) dfs(graph, i)
import sys sys.setrecursionlimit(10**6) def inp(): n, m = map(int, input().split()) graph = [] for i in range(n): graph.append(input()) return graph def dfs(graph, v): global seen seen.add(v) if ( v[0] - 1 >= 0 and graph[v[0] - 1][v[1]] == "." and (v[0] - 1, v[1]) not in seen ): dfs(graph, (v[0]-1, v[1])) if ( v[0] + 1 < len(graph) and graph[v[0] + 1][v[1]] == "." and (v[0] + 1, v[1]) not in seen ): dfs(graph, (v[0]+1, v[1])) if ( v[1] + 1 < len(graph[0]) and graph[v[0]][v[1] + 1] == "." and (v[0], v[1] + 1) not in seen ): dfs(graph, (v[0], v[1] + 1)) if ( v[1] - 1 >= 0 and graph[v[0]][v[1] - 1] == "." and (v[0], v[1] - 1) not in seen ): dfs(graph, (v[0], v[1] - 1)) def main(graph): global rooms for i in range(len(graph)): for j in range(len(graph[0])): if graph[i][j] == "." and (i, j) not in seen: dfs(graph, (i, j)) rooms+=1 seen = set() rooms = 0 main(inp()) print(rooms)