L= len
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 L( t[ 0 ] ) > a> -1 < b< L( t) and q-o:
z= r+[ w]
if ( h:= t[ b] [ a] ) in '│─' :k= 0 ; yield from g( t, w, l, d, s, z)
elif '┴' == h:k= 0 ; yield from g( t, w, h, d, s, z, 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 ( L( b[ 0 ] ) ) for y in range ( L( 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 L( set ( [ a in m, b in m] ) ) == 2and all ( not ( q:= set ( c) &set ( d) ) or all ( c.index ( i) > 2for 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) )
TD1sZW4KbT0n0JDQkdCS0JPQlNCV0IHQltCX0JjQmdCa0JvQnNCd0J7Qn9Cg0KHQotCj0KTQpdCm0KfQqNCp0KrQq9Cs0K3QrtCvJwpmPW0ubG93ZXIoKQpkZWYgZyh0LGMsbCxkLHM9W10scj1bXSxvPS0xKToKIGs9MQogZm9yIHEsKHgseSlpblsoMCxbMCwtMV0pLCgxLFsxLDBdKSwoMSxbLTEsMF0pXToKICBpZn4tKCh3Oj0oYTo9Y1swXSt4LGI6PWNbMV0reSkpaW4gcilhbmQgTCh0WzBdKT5hPi0xPGI8TCh0KWFuZCBxLW86CiAgIHo9citbd10KICAgaWYoaDo9dFtiXVthXSlpbifilILilIAnOms9MDt5aWVsZCBmcm9tIGcodCx3LGwsZCxzLHopCiAgIGVsaWYn4pS0Jz09aDprPTA7eWllbGQgZnJvbSBnKHQsdyxoLGQscyx6LDEpCiAgIGVsaWYn4pSsJz09aDoKICAgIGlmIHE6ZC5hcHBlbmQoc1stMV0pCiAgICBlbHNlOms9MDt5aWVsZCBmcm9tIGcodCx3LGgsZCxzLHopCiAgIGVsaWYgaCBpbiBtK2YgYW5kIGwgaW4n4pSs4pS0JzprPTA7eWllbGQgZnJvbSBnKHQsdyxoLGQscytbaF0seikKIGlmIGs6eWllbGQgcwpkZWYgYSh0KToKIGIscCx6PVsqZmlsdGVyKE5vbmUsdC5zcGxpdCgnXG4nKSldLHt9LFtdCiBmb3IgeCx5IGluWyh4LHkpZm9yIHggaW4gcmFuZ2UoTChiWzBdKSlmb3IgeSBpbiByYW5nZShMKGIpKWlmIGJbeV1beF1pbiBtK2ZdOgogIGZvciBzIGluIGcoYiwoeCx5KSxiW3ldW3hdLHoscz1bYlt5XVt4XV0scj1bKHgseSldKTpwW3NbMF1dPXAuZ2V0KHNbMF0sW10pK1tzXQogcmV0dXJuIGFueSh+LShhIGluIHopKn4tKGIgaW4geilhbmQgTChzZXQoW2EgaW4gbSxiIGluIG1dKSk9PTJhbmQgYWxsKG5vdChxOj1zZXQoYykmc2V0KGQpKW9yIGFsbChjLmluZGV4KGkpPjJmb3IgaSBpbiBxKWZvciBjIGluIHBbYV1mb3IgZCBpbiBwW2JdKWZvciBhIGluIHAgZm9yIGIgaW4gcCkKCnMxPSIiIgrRi+KUrNCaCiDRjiAKIiIiCnMyPSIiIgrQkOKUrNC0ICAK0J7ilLTQv+KUrNCpIAogICDQpCAKIiIiCnMzID0iIiIKINGO4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA0JkgIArQvOKUrNCVICAgICAgICAgICAKIOKUgiAgICAg0YggICAgICAKIOKUgiAgICAgICAgICAgIAog4pSCICAgICAgICAgICAgCiDQqSAgICAgICAgICAgIAoiIiIKczQ9IiIiCiAg0LfilKzQmSAgICAK0JvilKzQvOKUtNC/4pSA4pSs0KQgCtCr4pS00Y/ilKzQkCDRiOKUrNCvCiAgINCXICAg0JUgCiIiIgpzNT0iIiIKICDQt+KUrNCZICAgIArQm+KUrNC84pS00L/ilIDilKzQpCAgCtGR4pS00JDilKzRjyDRiOKUrNCvIAogICDQlyAgINCVIAoiIiIKczY9IiIiCiAgICAgICAgICAg0LTilKzQpCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiDRjuKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgNCZ4pS04pSA0ZHilKzQlyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg4pSCICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg4pSCICAgICAgICAgICAg0YggPHRoaXMgcGVyc29uIHNtZWxscyBiYWQgICAgICAKICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogINCpIDx0aGlzIHBlcnNvbiBiZXRyYXllZCB0aGUgUGFydHkhICAgICAgICAgIAoiIiIKczcgPSAiIiIK0KkgMTIzNDU2Nzg5MCBxdWljayBicm93biBmb3hlcyBqdW1wZWQgb3ZlciB0aGUgbGF6eSBkb2cg0YgKIiIiCnM4ID0gIiIiCiAgICDQt+KUrNCZICAgICAKICDQm+KUrNC84pS00L/ilIDilKzQpCAgCtC54pSs0KvilLTRj+KUrNCQINGI4pSs0K8gCiDQrSAgINCXICAg0Y4gIAoiIiIKczk9IiIiCiDQkOKUrNC0ICAgICAg0YTilKzQliAgIAog0LzilLTQv+KUrNCpICAgICDRjuKUrNCvICAKICAgINCkICAgICAgINGGICAgCiIiIgpwcmludChhKHMxKSkKcHJpbnQoYShzMikpCnByaW50KGEoczMpKQpwcmludChhKHM0KSkKcHJpbnQoYShzNSkpCnByaW50KGEoczYpKQpwcmludChhKHM3KSkKcHJpbnQoYShzOCkpCnByaW50KGEoczkpKQ==