#!/usr/bin/env python3 def main(): # Nacitame vstup sirka, vyska = map(int, input().split()) torus = [[c == "." for c in input()] for y in range(vyska)] ans = 0 # Odpoved for y in range(vyska): for x in range(sirka): # Prechadzame cele pole if torus[y][x]: # Ak najdeme policko, ktore sme este nevideli ans += 1 # Nasli sme novu oblast # Teraz ju celu prehladame # Zacneme od daneho policka DFS (prehladavanie do hlbky) stack = [(y, x)] # Zasobnik while len(stack): # Kym nie je prazdny yy, xx = stack.pop() # Berieme z neho lubovolne pole if not torus[yy][xx]: continue # Ak sme ho uz videli, ignorujeme torus[yy][xx] = False # Oznacime, ze sme ho uz videli # Pozrieme vsetky susedne policka for ny, nx in (((yy + 1) % vyska, xx), ((yy - 1) % vyska, xx), (yy, (xx + 1) % sirka), (yy, (xx - 1) % sirka)): # Ak sme dane pole este nevideli, pridame ho do zasobniku if arr[ny][nx]: stack.append((ny, nx)) print(ans) # Vypiseme odpoved main()