E=enumerate
M={(1,0):'|',(-1,0):'|',(0,-1):'-',(0,1):'-'}
def f(m):
d={(x,y):v for x,r in E(m)for y,v in E(r)};q=[i for i in d if'#'==d[i]];C=0
while q:
Q,S=[q[0]],[[],[q[0]]];q={*q}-{q[0]};C+=1
for x,y in Q:
for X,Y in M:
if(V:=(x+X,y+Y))in q or(d.get(V)in M.values())>(V in S[0]):S[V in q]+=V,;Q+=V,;q=[*{*q}-{V}]
for x,y in S[0]:
for X,Y in M:S[0]+=[V:=(x+X,y+Y)]*((M[(X,Y)]==d[(x,y)])>(V in S[0])<(d.get(V)==d[(x,y)]))
return C
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)))
RT1lbnVtZXJhdGUKTT17KDEsMCk6J3wnLCgtMSwwKTonfCcsKDAsLTEpOictJywoMCwxKTonLSd9CmRlZiBmKG0pOgogZD17KHgseSk6diBmb3IgeCxyIGluIEUobSlmb3IgeSx2IGluIEUocil9O3E9W2kgZm9yIGkgaW4gZCBpZicjJz09ZFtpXV07Qz0wCiB3aGlsZSBxOgogIFEsUz1bcVswXV0sW1tdLFtxWzBdXV07cT17KnF9LXtxWzBdfTtDKz0xCiAgZm9yIHgseSBpbiBROgogICBmb3IgWCxZIGluIE06CiAgICBpZihWOj0oeCtYLHkrWSkpaW4gcSBvcihkLmdldChWKWluIE0udmFsdWVzKCkpPihWIGluIFNbMF0pOlNbViBpbiBxXSs9Viw7USs9Viw7cT1bKnsqcX0te1Z9XQogIGZvciB4LHkgaW4gU1swXToKICAgZm9yIFgsWSBpbiBNOlNbMF0rPVtWOj0oeCtYLHkrWSldKigoTVsoWCxZKV09PWRbKHgseSldKT4oViBpbiBTWzBdKTwoZC5nZXQoVik9PWRbKHgseSldKSkKIHJldHVybiBDCiAKczEgPSAiIiIKICAgICAgIyN8ICAgICAKIyMjIyAgICB8ICAgICAKIyAjIyAgICAgICAgICAgICAgICAKIyAgIyAgfCMjICAgICAgCi0tLS0gIHwjIyMjIyMgCiAgICAgIHwgICAjIyMgCnwjIyAgIHwjIyAgICMgCnwjIyAtIHwjIyMjIyMgCiAgICAjIHwjIyMjICAgCiIiIgpzMj0gIiIiCiMgIyMKLSAjIwogICMjCiMjIyMKIyAjIAotLS0tCiIiIgpzMyA9ICIiIgogICAgICAjCnwjIyMgICMKfCAjICAgIwp8IyMjIyAtCiIiIgpzND0gIiIiCi0tLSAjI3wKIyMjICMjfAojIyMgICAgCiMjIyB8IyAKIiIiCnM1PSAiIiIKIyMjIyAgICAgICAgICAgICAjIyMjI3wgICAgICAgICAgIAojICMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiMjIyAgICAgICAgICAgICAgfCMgICAgICAgICAgIHwjIAojIyMjIyAgICAgICAgICAgIHwjICAgICAgICAgICB8IyMKLS0tLS0gICAgICAgICAgICB8IyAgICAgICAgICAgfCMKICAgICAgICAgICAgICAgICB8IyAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgfCMgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHwjICAgICAgICAgICAgICAKIiIiCnM2ID0gIiIiCnwjIHwjIHwjIHwjIHwjICN8ICN8ICN8CiIiIgpzNz0gIiIiCnwjIyAgIAp8ICAgIyMKfCMgIC0tCiIiIgpzOD0gIiIiCiAgICAgIHwjIyAgICAgIAotLS0tICB8IyMjIyAgICAKIyAjIyAgICAgICAgICAKIyMjICAgfCMgICAgICAKICAgICAgfCMgICMjI3wKICAgICAgfCMgICAgI3wKICAgICAgfCMgICAjI3wKICAgICAgfCMgICAgICAKIiIiCnM5ID0gIiIiCi0gfCMjICAgCiMgICAgICAjCiAgI3wgIyMjCiAgI3wgLS0tCiIiIgpzMTAgPSAiIiIKIwojIyMjCi0tLS0KICAgICAKLS0gICAKICMgIAoiIiIKczExID0gIiIiCiMjCiMjCi0tCiAgCi0tCiMjCiMjCiIiIgpkZWYgdG9fYm9hcmQocyk6CglyZXR1cm4gW1sqaV0gZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMuc3BsaXQoJ1xuJykpXQoKcHJpbnQoZih0b19ib2FyZChzMSkpKQpwcmludChmKHRvX2JvYXJkKHMyKSkpCnByaW50KGYodG9fYm9hcmQoczMpKSkKcHJpbnQoZih0b19ib2FyZChzNCkpKQpwcmludChmKHRvX2JvYXJkKHM1KSkpCnByaW50KGYodG9fYm9hcmQoczYpKSkKcHJpbnQoZih0b19ib2FyZChzNykpKQpwcmludChmKHRvX2JvYXJkKHM4KSkpCnByaW50KGYodG9fYm9hcmQoczkpKSkKcHJpbnQoZih0b19ib2FyZChzMTApKSkKcHJpbnQoZih0b19ib2FyZChzMTEpKSk=