res=
->d{c=->d,f,v,u{i=0
r=[]
d.map{|y|j=0
e=[]
y.map{|x|f[j]||=[]
f[j][i]=x
x==v ?e[1]?r<<e+[x]&&e=[x]:e[0]?e=[x]:e<<x :x==u&&e[0]?e<<x :e=[]
j+=1}
i+=1}
r}
y=c[d.split.map(&:chars),f=[],?|,?-]+c[f,[],?-,?|]
y.count{|x|y.all?{|q|x.equal?(q)||!(q+x).uniq!(&:object_id)}}}
tests=[
"
|#|-|#|##
#||--|||#
###|#|--#
###-||--|
-#-|#-|#-
#---#-#-|
#-#-|#--|
",
"
##--
||##
-#|-
|#|#
",
"
-##|-##--
#|#-|#||-
--|-#|#||
##||||-##
||#|--|-|
-#|-#--|#
|####|#-#
",
"
#|--|---|-|#
####|##--||-
-|-##||#|---
-#|#-|-#-|||
#|-##--###|-
---#-||-#-##
#|---|###|-#
-|---#-#|#|#
|#--|####-|-
",
"
-|-||---##|#
---|######-#
####-##|#--|
|||##|#-||||
####-#-||-#|
---#--|#-#--
-|#-####-##-
#||-|-|-###|
|-##||-||-#-
",
"
|#-|#|#-###|#-#
----#####|#----
|#--#-##-#|##-|
|#-|#-|--##||--
||#-#---##|||##
#|#-|||-#-#--||
--#|-||#|--|#|#
-#-|###||-#--#|
-#||-|#-##||##|
|--|-|||-##|-#|
",
"
||-|-|-##-#-#-|#--#-
-##|-#|-#-##-|#|--|-
||#---###||-|#|##|-#
#||-#-#-|---|#||#|##
-#-###-##-|-#-|-#||#
##-#--#||-----||-|##
-|--#-#-#|---#-#|#-#
###|-|#-#|-|###|#-|#
#||#-#|--|-||#------
||##|-||#-|--#|#-#-#
|#-|-#-|-|--##-#|||#
-|#--#||##---##|-##-
#|-|-|-||-||#-#-|##-
|-#|##|-|#|#|--||#--
",
]
puts "expected: 2004549"
print "result: "
tests.each{|x|print res[x]}
cmVzPQotPmR7Yz0tPmQsZix2LHV7aT0wCnI9W10KZC5tYXB7fHl8aj0wCmU9W10KeS5tYXB7fHh8ZltqXXx8PVtdCmZbal1baV09eAp4PT12ID9lWzFdP3I8PGUrW3hdJiZlPVt4XTplWzBdP2U9W3hdOmU8PHggOng9PXUmJmVbMF0/ZTw8eCA6ZT1bXQpqKz0xfQppKz0xfQpyfQp5PWNbZC5zcGxpdC5tYXAoJjpjaGFycyksZj1bXSw/fCw/LV0rY1tmLFtdLD8tLD98XQp5LmNvdW50e3x4fHkuYWxsP3t8cXx4LmVxdWFsPyhxKXx8IShxK3gpLnVuaXEhKCY6b2JqZWN0X2lkKX19fQoKdGVzdHM9WwoiCnwjfC18I3wjIwojfHwtLXx8fCMKIyMjfCN8LS0jCiMjIy18fC0tfAotIy18Iy18Iy0KIy0tLSMtIy18CiMtIy18Iy0tfAoiLAoiCiMjLS0KfHwjIwotI3wtCnwjfCMKIiwKIgotIyN8LSMjLS0KI3wjLXwjfHwtCi0tfC0jfCN8fAojI3x8fHwtIyMKfHwjfC0tfC18Ci0jfC0jLS18Iwp8IyMjI3wjLSMKIiwKIgojfC0tfC0tLXwtfCMKIyMjI3wjIy0tfHwtCi18LSMjfHwjfC0tLQotI3wjLXwtIy18fHwKI3wtIyMtLSMjI3wtCi0tLSMtfHwtIy0jIwojfC0tLXwjIyN8LSMKLXwtLS0jLSN8I3wjCnwjLS18IyMjIy18LQoiLAoiCi18LXx8LS0tIyN8IwotLS18IyMjIyMjLSMKIyMjIy0jI3wjLS18Cnx8fCMjfCMtfHx8fAojIyMjLSMtfHwtI3wKLS0tIy0tfCMtIy0tCi18Iy0jIyMjLSMjLQojfHwtfC18LSMjI3wKfC0jI3x8LXx8LSMtCiIsCiIKfCMtfCN8Iy0jIyN8Iy0jCi0tLS0jIyMjI3wjLS0tLQp8Iy0tIy0jIy0jfCMjLXwKfCMtfCMtfC0tIyN8fC0tCnx8Iy0jLS0tIyN8fHwjIwojfCMtfHx8LSMtIy0tfHwKLS0jfC18fCN8LS18I3wjCi0jLXwjIyN8fC0jLS0jfAotI3x8LXwjLSMjfHwjI3wKfC0tfC18fHwtIyN8LSN8CiIsCiIKfHwtfC18LSMjLSMtIy18Iy0tIy0KLSMjfC0jfC0jLSMjLXwjfC0tfC0KfHwjLS0tIyMjfHwtfCN8IyN8LSMKI3x8LSMtIy18LS0tfCN8fCN8IyMKLSMtIyMjLSMjLXwtIy18LSN8fCMKIyMtIy0tI3x8LS0tLS18fC18IyMKLXwtLSMtIy0jfC0tLSMtI3wjLSMKIyMjfC18Iy0jfC18IyMjfCMtfCMKI3x8Iy0jfC0tfC18fCMtLS0tLS0KfHwjI3wtfHwjLXwtLSN8Iy0jLSMKfCMtfC0jLXwtfC0tIyMtI3x8fCMKLXwjLS0jfHwjIy0tLSMjfC0jIy0KI3wtfC18LXx8LXx8Iy0jLXwjIy0KfC0jfCMjfC18I3wjfC0tfHwjLS0KIiwKXQoKcHV0cyAiZXhwZWN0ZWQ6IDIwMDQ1NDkiCnByaW50ICJyZXN1bHQ6ICAgIgp0ZXN0cy5lYWNoe3x4fHByaW50IHJlc1t4XX0=