E= enumerate
def f( s) :
d= { ( x, y) :v for x, r in E( s) for y, v in E( r) } ; q= { ( x, y) :T[ d[ ( x, y) ] ] for x, y in d if ( ' ' == d[ ( x, y) ] ) in ( T:= { d.get ( V, 0 ) :V for V in [ ( x+1 , y) , ( x, y+1 ) , ( x-1 , y) , ( x, y-1 ) ] } ) and d[ ( x, y) ] in T} ; r= { }
while q:
x, y= V= [ *q] [ 0 ] ; J, K= q.pop ( V) ; X, Y= J-x, K-y; l= [ ]
while d.get ( W:= ( x+X, y+Y) , ' ' ) .isalpha ( ) :l+= d[ W] ,; x, y= W; q.pop ( W, 0 )
r[ d[ V] ] = { *l} -{ d[ V] }
q= [ ( T:= '' .join ( i for i in r if not r[ i] ) , T) ]
for a, b in q:
if '' == ( Q:= '' .join ( k for k in r if any ( u in r[ k] for u in a) ) ) :return b[ ::-1 ]
q+= ( Q, b+Q) ,
s1 = """
R
R
BBRBB
R
"""
s2 = """
GY
GY
RRRRGYRRR
GY
GY
BBBBBBBB
GY
GY
"""
s3 = """
R P
R P
AAAARAAAAPA
R P
R P
GGGGRGGG P
R
"""
s4 = """
O Y
RRRYR
O Y
GOGGG
O Y
"""
s5 = """
YYYB
B
B
"""
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) ) )
RT1lbnVtZXJhdGUKZGVmIGYocyk6CiBkPXsoeCx5KTp2IGZvciB4LHIgaW4gRShzKWZvciB5LHYgaW4gRShyKX07cT17KHgseSk6VFtkWyh4LHkpXV1mb3IgeCx5IGluIGQgaWYoJyAnPT1kWyh4LHkpXSlpbihUOj17ZC5nZXQoViwwKTpWIGZvciBWIGluWyh4KzEseSksKHgseSsxKSwoeC0xLHkpLCh4LHktMSldfSlhbmQgZFsoeCx5KV1pbiBUfTtyPXt9CiB3aGlsZSBxOgogIHgseT1WPVsqcV1bMF07SixLPXEucG9wKFYpO1gsWT1KLXgsSy15O2w9W10KICB3aGlsZSBkLmdldChXOj0oeCtYLHkrWSksJyAnKS5pc2FscGhhKCk6bCs9ZFtXXSw7eCx5PVc7cS5wb3AoVywwKQogIHJbZFtWXV09eypsfS17ZFtWXX0KIHE9WyhUOj0nJy5qb2luKGkgZm9yIGkgaW4gciBpZiBub3QgcltpXSksVCldCiBmb3IgYSxiIGluIHE6CiAgaWYnJz09KFE6PScnLmpvaW4oayBmb3IgayBpbiByIGlmIGFueSh1IGluIHJba11mb3IgdSBpbiBhKSkpOnJldHVybiBiWzo6LTFdCiAgcSs9KFEsYitRKSwKICAKczEgPSAiIiIKICBSICAKICBSICAKQkJSQkIKICBSICAKIiIiCnMyID0gIiIiCiAgICBHWSAgIAogICAgR1kgICAKUlJSUkdZUlJSCiAgICBHWSAgIAogICAgR1kgICAKQkJCQkJCQkIKICAgIEdZICAKICAgIEdZICAKIiIiCnMzID0gIiIiCiAgICBSICAgIFAgCiAgICBSICAgIFAgCkFBQUFSQUFBQVBBCiAgICBSICAgIFAgCiAgICBSICAgIFAgCkdHR0dSR0dHIFAgCiAgICBSICAgICAgCiIiIgpzNCA9ICIiIgogTyBZIApSUlJZUgogTyBZIApHT0dHRwogTyBZIAoiIiIKczUgPSAiIiIKWVlZQgogICBCCiAgIEIKIiIiCmRlZiB0b19ib2FyZChzKToKCXJldHVybiBbWyppXSBmb3IgaSBpbiBmaWx0ZXIoTm9uZSwgcy5zcGxpdCgnXG4nKSldCgpwcmludChmKHRvX2JvYXJkKHMxKSkpCnByaW50KGYodG9fYm9hcmQoczIpKSkKcHJpbnQoZih0b19ib2FyZChzMykpKQpwcmludChmKHRvX2JvYXJkKHM0KSkpCnByaW50KGYodG9fYm9hcmQoczUpKSk=