#!/usr/bin/python3 # Autoři: Ríša Hladík a Ondra Hlavatý # Rozdíly souřadnic sousedů sousedi = ( (0, 1), (0, -1), (1, 0), (-1, 0) ) # Rozdíly souřadnic pod válcem valec = tuple((dr, ds) for dr in range(3) for ds in range(3)) # Zkontroluje, zda jsou všechna políčka pod válcem na pozici (r, s) volná def volne(r, s): return all(A[r + dr][s + ds] for dr, ds in valec) # Zkontroluje, zda je políčko vhodné pro umístění válce def vhodne(r, s): return r >= 0 and s >= 0 and r + 3 <= R and s + 3 <= S and volne(r, s) # Načteme vstup - velikost mřížky a to, jestli je dané políčko volné R, S = (int(x) for x in input().split()) A = tuple(tuple(c == 'O' for c in input()) for _ in range(R)) # Připravíme si mřížky značek zapocteno = tuple([False] * S for _ in range(R)) navstiveno = tuple([False] * S for _ in range(R)) # Pomocné proměnné vysledek = 0 zasobnik = [(0, 0)] navstiveno[0][0] = True while zasobnik: r, s = zasobnik.pop() for dr, ds in valec: nr, ns = r + dr, s + ds if not zapocteno[nr][ns]: zapocteno[nr][ns] = True vysledek += 1 for dr, ds in sousedi: nr, ns = r + dr, s + ds if not vhodne(nr, ns): continue if not navstiveno[nr][ns]: navstiveno[nr][ns] = True zasobnik.append((nr, ns)) print(vysledek)