def is_free(y,x,t,island):
if t == 'N':
if y-1 < 0:
return True
if island[y-1][x] == '.':
return is_free(y-1,x,t,island)
else:
return False
if t == 'S':
if y+1 >= len(island):
return True
if island[y+1][x] == '.':
return is_free(y+1,x,t,island)
else:
return False
if t == 'E':
if x+1 >= len(island[y]):
return True
if island[y][x+1] == '.':
return is_free(y,x+1,t,island)
else:
return False
if t == 'W':
if x-1 < 0:
return True
if island[y][x-1] == '.':
return is_free(y,x-1,t,island)
else:
return False
if t == '.':
return False
def is_ready(island):
for i in range(0,len(island)):
for j in range(0,len(island[i])):
if island[i][j] != '.':
if is_free(i,j,island[i][j],island):
return False
return True
size = input().split(' ')
size[0]=int(size[0])
size[1]=int(size[1])
count=0
island = []
for i in range(0,size[0]):
island.append(list(input()))
while not is_ready(island):
for i in range(0,size[0]):
for j in range(0,size[1]):
if island[i][j] != '.':
if is_free(i,j,island[i][j],island):
count+=1
island[i][j]='.'
print(count)
ZGVmIGlzX2ZyZWUoeSx4LHQsaXNsYW5kKToKICAgIGlmIHQgPT0gJ04nOgogICAgICAgIGlmIHktMSA8IDA6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgaWYgaXNsYW5kW3ktMV1beF0gPT0gJy4nOgogICAgICAgICAgICByZXR1cm4gaXNfZnJlZSh5LTEseCx0LGlzbGFuZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIAogICAgaWYgdCA9PSAnUyc6CiAgICAgICAgaWYgeSsxID49IGxlbihpc2xhbmQpOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIGlmIGlzbGFuZFt5KzFdW3hdID09ICcuJzoKICAgICAgICAgICAgcmV0dXJuIGlzX2ZyZWUoeSsxLHgsdCxpc2xhbmQpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICBpZiB0ID09ICdFJzoKICAgICAgICBpZiB4KzEgPj0gbGVuKGlzbGFuZFt5XSk6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgaWYgaXNsYW5kW3ldW3grMV0gPT0gJy4nOgogICAgICAgICAgICByZXR1cm4gaXNfZnJlZSh5LHgrMSx0LGlzbGFuZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHQgPT0gJ1cnOgogICAgICAgIGlmIHgtMSA8IDA6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgaWYgaXNsYW5kW3ldW3gtMV0gPT0gJy4nOgogICAgICAgICAgICByZXR1cm4gaXNfZnJlZSh5LHgtMSx0LGlzbGFuZCkKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIGlmIHQgPT0gJy4nOgogICAgICAgIHJldHVybiBGYWxzZQogCmRlZiBpc19yZWFkeShpc2xhbmQpOgogICAgZm9yIGkgaW4gcmFuZ2UoMCxsZW4oaXNsYW5kKSk6CiAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCxsZW4oaXNsYW5kW2ldKSk6CiAgICAgICAgICAgIGlmIGlzbGFuZFtpXVtqXSAhPSAnLic6CiAgICAgICAgICAgICAgICBpZiBpc19mcmVlKGksaixpc2xhbmRbaV1bal0saXNsYW5kKToKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgIHJldHVybiBUcnVlCiAgICAgCiAgICAgCiAKc2l6ZSA9IGlucHV0KCkuc3BsaXQoJyAnKQpzaXplWzBdPWludChzaXplWzBdKQpzaXplWzFdPWludChzaXplWzFdKQpjb3VudD0wCmlzbGFuZCA9IFtdCmZvciBpIGluIHJhbmdlKDAsc2l6ZVswXSk6CiAgICBpc2xhbmQuYXBwZW5kKGxpc3QoaW5wdXQoKSkpCndoaWxlIG5vdCBpc19yZWFkeShpc2xhbmQpOgogICAgZm9yIGkgaW4gcmFuZ2UoMCxzaXplWzBdKToKICAgICAgICBmb3IgaiBpbiByYW5nZSgwLHNpemVbMV0pOgogICAgICAgICAgICBpZiBpc2xhbmRbaV1bal0gIT0gJy4nOgogICAgICAgICAgICAgICAgaWYgaXNfZnJlZShpLGosaXNsYW5kW2ldW2pdLGlzbGFuZCk6CiAgICAgICAgICAgICAgICAgICAgY291bnQrPTEKICAgICAgICAgICAgICAgICAgICBpc2xhbmRbaV1bal09Jy4nCnByaW50KGNvdW50KQ==