'''
2022年1月的做法
时隔一年换了一种做法
但是依然犯了21年的错误。。。
'''
r,c = input().split()
r = int(r)
c = int(c)
lis = []
for i in range(r):
li = list(input())
lis.append(li)
r = r - 1
c = c - 1
nodelis = []
for x in range(r):
for y in range(c):
nodelis.append((x, y))
s = set()
s2 = set('face')
res = 0
if r < 1 or c < 1:
print(res)
else:
for node in nodelis:
new_node1 = (node[0], node[1] + 1)
new_node2 = (node[0] + 1, node[1] + 1)
new_node3 = (node[0] + 1, node[1])
s.add(lis[node[0]][node[1]])
s.add(lis[new_node1[0]][new_node1[1]])
s.add(lis[new_node2[0]][new_node2[1]])
s.add(lis[new_node3[0]][new_node3[1]])
if s == s2:
res += 1
s.clear()
print(res)
'''2021 年2月的做法 '''
n, m = input().split()
n = int(n)
m = int(m)
lis = []
s = set()
s1 = set('face')
count = 0
# 生成右,下,右下 三个位置的下标
dirs = [
lambda x, y: (x, y + 1),
lambda x, y: (x + 1, y),
lambda x, y: (x + 1, y + 1)
]
for i in range(n):
li = list(input())
lis.append(li)
# 如果无法构成2*2则直接输出 0
if n < 2 and m < 2:
print(0)
else:
for x in range(n - 1):
for y in range(m - 1): # 最后一列和最后一行不用统计
s.add(lis[x][y]) # 将当前格子的字符加入集合s
for dir in dirs:
next_node = dir(x, y)
# 得到当前格子右,下,右下的格子坐标,如果没有越界则将该格子字符加入集合s
if -1 < next_node[0] < n and -1 < next_node[1] < m:
s.add(lis[next_node[0]][next_node[1]])
if s == s1: # 判断集合s与s1是否相等
count += 1
s.clear()
print(count)
'''
坑:题目并没有说只输入face字符,有可能输入其他字符,所以不能依靠集合去重功能来判断.
之前掉到这个坑里了:
if len(s)==4:
count += 1
s.clear()
'''