from itertools import *
def f( b) :
C= count( ) ; v= [ *zip ( *[ [ k for _, b in groupby( j) for k in [ next( C) ] *len ( [ *b] ) ] for j in zip ( *b) ] ) ] ; q, S= [ ( 0 , 0 , [ v[ 0 ] [ 0 ] ] ) ] *( '#' != b[ 0 ] [ 0 ] ) , [ ] ; J= len ( b) ; K= len ( b[ 0 ] )
for x, y, p in q:
if J-x== 1 == K-y:S+= p,; continue
for n, m in [ ( x+1 , y) , ( x, y+1 ) ] :
if n< J and m< K and '.' == b[ n] [ m] :q+= ( n, m, p+[ v[ n] [ m] ] ) ,
return len ( { tuple ( { *i} ) for i in S} )
s1 = """
....
....
....
"""
s2 = """
...#
....
...#
"""
s3 = """
#..#
..#.
....
"""
s4 = """
......
......
..##..
......
......
"""
s5 = """
......
...#..
......
..#...
#.....
"""
s6 = """
......
..#...
......
....#.
#.....
"""
s7 = """
.......
##.....
....###
...#...
..##.#.
#....#.
..#....
"""
s8 = """
......#.
..##....
...#....
.......#
....#...
.##...#.
....#...
##......
"""
s9 = """
.........
.#.#.#.#.
.........
#.#...#.#
.........
.#.#.#.#.
.........
"""
s10 = """
..........
.#........
..........
.....#....
#.........
........#.
......#...
..........
"""
s11 = """
.........
.#.......
.........
...#.....
.........
.....#...
.........
.......#.
.........
"""
def to_board( s) :
return [ [ *i] for i in filter ( None , s.split ( '\n ' ) ) ]
print ( f( to_board( s1) ) )
print ( f( to_board( s2) ) )
print ( f( to_board( s3) ) )
print ( f( to_board( s4) ) )
print ( f( to_board( s5) ) )
print ( f( to_board( s6) ) )
print ( f( to_board( s7) ) )
print ( f( to_board( s8) ) )
print ( f( to_board( s9) ) )
print ( f( to_board( s10) ) )
print ( f( to_board( s11) ) )
ZnJvbSBpdGVydG9vbHMgaW1wb3J0KgpkZWYgZihiKToKIEM9Y291bnQoKTt2PVsqemlwKCpbW2sgZm9yIF8sYiBpbiBncm91cGJ5KGopZm9yIGsgaW5bbmV4dChDKV0qbGVuKFsqYl0pXWZvciBqIGluIHppcCgqYildKV07cSxTPVsoMCwwLFt2WzBdWzBdXSldKignIychPWJbMF1bMF0pLFtdO0o9bGVuKGIpO0s9bGVuKGJbMF0pCiBmb3IgeCx5LHAgaW4gcToKICBpZiBKLXg9PTE9PUsteTpTKz1wLDtjb250aW51ZQogIGZvciBuLG0gaW5bKHgrMSx5KSwoeCx5KzEpXToKICAgaWYgbjxKIGFuZCBtPEsgYW5kJy4nPT1iW25dW21dOnErPShuLG0scCtbdltuXVttXV0pLAogcmV0dXJuIGxlbih7dHVwbGUoeyppfSlmb3IgaSBpbiBTfSkKIApzMSA9ICIiIgouLi4uCi4uLi4KLi4uLgoiIiIKczIgPSAiIiIKLi4uIwouLi4uCi4uLiMKIiIiCnMzID0gIiIiCiMuLiMKLi4jLgouLi4uCiIiIgpzNCA9ICIiIgouLi4uLi4KLi4uLi4uCi4uIyMuLgouLi4uLi4KLi4uLi4uCiIiIgpzNSA9ICIiIgouLi4uLi4KLi4uIy4uCi4uLi4uLgouLiMuLi4KIy4uLi4uCiIiIgpzNiA9ICIiIgouLi4uLi4KLi4jLi4uCi4uLi4uLgouLi4uIy4KIy4uLi4uCiIiIgpzNyA9ICIiIgouLi4uLi4uCiMjLi4uLi4KLi4uLiMjIwouLi4jLi4uCi4uIyMuIy4KIy4uLi4jLgouLiMuLi4uCiIiIgpzOCA9ICIiIgouLi4uLi4jLgouLiMjLi4uLgouLi4jLi4uLgouLi4uLi4uIwouLi4uIy4uLgouIyMuLi4jLgouLi4uIy4uLgojIy4uLi4uLgoiIiIKczkgPSAiIiIKLi4uLi4uLi4uCi4jLiMuIy4jLgouLi4uLi4uLi4KIy4jLi4uIy4jCi4uLi4uLi4uLgouIy4jLiMuIy4KLi4uLi4uLi4uCiIiIgpzMTAgPSAiIiIKLi4uLi4uLi4uLgouIy4uLi4uLi4uCi4uLi4uLi4uLi4KLi4uLi4jLi4uLgojLi4uLi4uLi4uCi4uLi4uLi4uIy4KLi4uLi4uIy4uLgouLi4uLi4uLi4uCiIiIgpzMTEgPSAiIiIKLi4uLi4uLi4uCi4jLi4uLi4uLgouLi4uLi4uLi4KLi4uIy4uLi4uCi4uLi4uLi4uLgouLi4uLiMuLi4KLi4uLi4uLi4uCi4uLi4uLi4jLgouLi4uLi4uLi4KIiIiCmRlZiB0b19ib2FyZChzKToKCXJldHVybiBbWyppXWZvciBpIGluIGZpbHRlcihOb25lLCBzLnNwbGl0KCdcbicpKV0KCnByaW50KGYodG9fYm9hcmQoczEpKSkKcHJpbnQoZih0b19ib2FyZChzMikpKQpwcmludChmKHRvX2JvYXJkKHMzKSkpCnByaW50KGYodG9fYm9hcmQoczQpKSkKcHJpbnQoZih0b19ib2FyZChzNSkpKQpwcmludChmKHRvX2JvYXJkKHM2KSkpCnByaW50KGYodG9fYm9hcmQoczcpKSkKcHJpbnQoZih0b19ib2FyZChzOCkpKQpwcmludChmKHRvX2JvYXJkKHM5KSkpCnByaW50KGYodG9fYm9hcmQoczEwKSkpCnByaW50KGYodG9fYm9hcmQoczExKSkp