m= 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
f= m.lower ( )
def g( t, c, l, d, s= [ ] , r= [ ] , o= -1 ) :
k= 1
for q, ( x, y) in [ ( 0 , [ 0 , -1 ] ) , ( 1 , [ 1 , 0 ] ) , ( 1 , [ -1 , 0 ] ) ] :
if ~ -( ( w:= ( a:= c[ 0 ] +x, b:= c[ 1 ] +y) ) in r) and len ( t[ 0 ] ) > a> -1 < b< len ( t) and q-o:
z= r+[ w]
if ( h:= t[ b] [ a] ) == '│' or '─' == h:k= 0 ; yield from g( t, w, l, d, s, z)
elif '┴' == h:k= 0 ; yield from g( t, w, h, d, s, z, o= 1 )
elif '┬' == h:
if q:d.append ( s[ -1 ] )
else :k= 0 ; yield from g( t, w, h, d, s, z)
elif h in m+f and l in '┬┴' :k= 0 ; yield from g( t, w, h, d, s+[ h] , z)
if k:yield s
def a( t) :
b, p, z= [ *filter ( None , t.split ( '\n ' ) ) ] , { } , [ ]
for x, y in [ ( x, y) for x in range ( len ( b[ 0 ] ) ) for y in range ( len ( b) ) if b[ y] [ x] in m+f] :
for s in g( b, ( x, y) , b[ y] [ x] , z, s= [ b[ y] [ x] ] , r= [ ( x, y) ] ) :p[ s[ 0 ] ] = p.get ( s[ 0 ] , [ ] ) +[ s]
return any ( ~ -( a in z) *~ -( b in z) and len ( set ( [ a in m, b in m] ) ) == 2and( ~ -any ( ( q:= set ( c) &set ( d) ) and any ( c.index ( i) < 3for i in q) for c in p[ a] for d in p[ b] ) ) for a in p for b in p)
s1= """
ы┬К
ю
"""
s2= """
А┬д
О┴п┬Щ
Ф
"""
s3 = """
ю┬────────Й
м┬Е
│ ш
│
│
Щ
"""
s4= """
з┬Й
Л┬м┴п─┬Ф
Ы┴я┬А ш┬Я
З Е
"""
s5= """
з┬Й
Л┬м┴п─┬Ф
ё┴А┬я ш┬Я
З Е
"""
s6= """
д┬Ф
ю┬────────Й┴─ё┬З
│ │
│ ш <this person smells bad
│
│
Щ <this person betrayed the Party!
"""
s7 = """
Щ 1234567890 quick brown foxes jumped over the lazy dog ш
"""
s8 = """
з┬Й
Л┬м┴п─┬Ф
й┬Ы┴я┬А ш┬Я
Э З ю
"""
s9= """
А┬д ф┬Ж
м┴п┬Щ ю┬Я
Ф ц
"""
print ( a( s1) )
print ( a( s2) )
print ( a( s3) )
print ( a( s4) )
print ( a( s5) )
print ( a( s6) )
print ( a( s7) )
print ( a( s8) )
print ( a( s9) )
bT0n0JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCvJwpmPW0ubG93ZXIoKQpkZWYgZyh0LGMsbCxkLHM9W10scj1bXSxvPS0xKToKIGs9MQogZm9yIHEsKHgseSlpblsoMCxbMCwtMV0pLCgxLFsxLDBdKSwoMSxbLTEsMF0pXToKICBpZn4tKCh3Oj0oYTo9Y1swXSt4LGI6PWNbMV0reSkpaW4gcilhbmQgbGVuKHRbMF0pPmE+LTE8YjxsZW4odClhbmQgcS1vOgogICB6PXIrW3ddCiAgIGlmKGg6PXRbYl1bYV0pPT0n4pSCJ29yJ+KUgCc9PWg6az0wO3lpZWxkIGZyb20gZyh0LHcsbCxkLHMseikKICAgZWxpZifilLQnPT1oOms9MDt5aWVsZCBmcm9tIGcodCx3LGgsZCxzLHosbz0xKQogICBlbGlmJ+KUrCc9PWg6CiAgICBpZiBxOmQuYXBwZW5kKHNbLTFdKQogICAgZWxzZTprPTA7eWllbGQgZnJvbSBnKHQsdyxoLGQscyx6KQogICBlbGlmIGggaW4gbStmIGFuZCBsIGluJ+KUrOKUtCc6az0wO3lpZWxkIGZyb20gZyh0LHcsaCxkLHMrW2hdLHopCiBpZiBrOnlpZWxkIHMKZGVmIGEodCk6CiBiLHAsej1bKmZpbHRlcihOb25lLCB0LnNwbGl0KCdcbicpKV0se30sW10KIGZvciB4LHkgaW5bKHgseSlmb3IgeCBpbiByYW5nZShsZW4oYlswXSkpZm9yIHkgaW4gcmFuZ2UobGVuKGIpKWlmIGJbeV1beF1pbiBtK2ZdOgogIGZvciBzIGluIGcoYiwoeCx5KSxiW3ldW3hdLHoscz1bYlt5XVt4XV0scj1bKHgseSldKTpwW3NbMF1dPXAuZ2V0KHNbMF0sW10pK1tzXQogcmV0dXJuIGFueSh+LShhIGluIHopKn4tKGIgaW4geilhbmQgbGVuKHNldChbYSBpbiBtLGIgaW4gbV0pKT09MmFuZCh+LWFueSgocTo9c2V0KGMpJnNldChkKSlhbmQgYW55KGMuaW5kZXgoaSk8M2ZvciBpIGluIHEpZm9yIGMgaW4gcFthXWZvciBkIGluIHBbYl0pKWZvciBhIGluIHAgZm9yIGIgaW4gcCkKIApzMT0iIiIK0YvilKzQmgog0Y4gCiIiIgpzMj0iIiIK0JDilKzQtCAgCtCe4pS00L/ilKzQqSAKICAg0KQgCiIiIgpzMyA9IiIiCiDRjuKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgNCZICAK0LzilKzQlSAgICAgICAgICAgCiDilIIgICAgINGIICAgICAgCiDilIIgICAgICAgICAgICAKIOKUgiAgICAgICAgICAgIAog0KkgICAgICAgICAgICAKIiIiCnM0PSIiIgogINC34pSs0JkgICAgCtCb4pSs0LzilLTQv+KUgOKUrNCkIArQq+KUtNGP4pSs0JAg0YjilKzQrwogICDQlyAgINCVIAoiIiIKczU9IiIiCiAg0LfilKzQmSAgICAK0JvilKzQvOKUtNC/4pSA4pSs0KQgIArRkeKUtNCQ4pSs0Y8g0YjilKzQryAKICAg0JcgICDQlSAKIiIiCnM2PSIiIgogICAgICAgICAgINC04pSs0KQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog0Y7ilKzilIDilIDilIDilIDilIDilIDilIDilIDQmeKUtOKUgNGR4pSs0JcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIOKUgiAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIOKUgiAgICAgICAgICAgINGIIDx0aGlzIHBlcnNvbiBzbWVsbHMgYmFkICAgICAgCiAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICDQqSA8dGhpcyBwZXJzb24gYmV0cmF5ZWQgdGhlIFBhcnR5ISAgICAgICAgICAKIiIiCnM3ID0gIiIiCtCpIDEyMzQ1Njc4OTAgcXVpY2sgYnJvd24gZm94ZXMganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nINGICiIiIgpzOCA9ICIiIgogICAg0LfilKzQmSAgICAgCiAg0JvilKzQvOKUtNC/4pSA4pSs0KQgIArQueKUrNCr4pS00Y/ilKzQkCDRiOKUrNCvIAog0K0gICDQlyAgINGOICAKIiIiCnM5PSIiIgog0JDilKzQtCAgICAgINGE4pSs0JYgICAKINC84pS00L/ilKzQqSAgICAg0Y7ilKzQryAgCiAgICDQpCAgICAgICDRhiAgIAoiIiIKcHJpbnQoYShzMSkpCnByaW50KGEoczIpKQpwcmludChhKHMzKSkKcHJpbnQoYShzNCkpCnByaW50KGEoczUpKQpwcmludChhKHM2KSkKcHJpbnQoYShzNykpCnByaW50KGEoczgpKQpwcmludChhKHM5KSk=