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:= ( x+X, y+Y) , 0 ) :V for X, Y in [ ( 1 , 0 ) , ( 0 , 1 ) , ( -1 , 0 ) , ( 0 , -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) ) )
RT1lbnVtZXJhdGUKZGVmIGYocyk6CiBkPXsoeCx5KTp2IGZvciB4LHIgaW4gRShzKWZvciB5LHYgaW4gRShyKX07cT17KHgseSk6VFtkWyh4LHkpXV1mb3IgeCx5IGluIGQgaWYoJyAnPT1kWyh4LHkpXSlpbihUOj17ZC5nZXQoVjo9KHgrWCx5K1kpLDApOlYgZm9yIFgsWSBpblsoMSwwKSwoMCwxKSwoLTEsMCksKDAsLTEpXX0pYW5kIGRbKHgseSldaW4gVH07cj17fQogd2hpbGUgcToKICB4LHk9Vj1bKnFdWzBdO0osSz1xLnBvcChWKTtYLFk9Si14LEsteTtsPVtdCiAgd2hpbGUgZC5nZXQoVzo9KHgrWCx5K1kpLCcgJykuaXNhbHBoYSgpOmwrPWRbV10sO3gseT1XO3EucG9wKFcsMCkKICByW2RbVl1dPXsqbH0te2RbVl19CiBxPVsoVDo9Jycuam9pbihpIGZvciBpIGluIHIgaWYgbm90IHJbaV0pLFQpXQogZm9yIGEsYiBpbiBxOgogIGlmJyc9PShROj0nJy5qb2luKGsgZm9yIGsgaW4gciBpZiBhbnkodSBpbiByW2tdZm9yIHUgaW4gYSkpKTpyZXR1cm4gYls6Oi0xXQogIHErPShRLGIrUSksCiAgCnMxID0gIiIiCiAgUiAgCiAgUiAgCkJCUkJCCiAgUiAgCiIiIgpzMiA9ICIiIgogICAgR1kgICAKICAgIEdZICAgClJSUlJHWVJSUgogICAgR1kgICAKICAgIEdZICAgCkJCQkJCQkJCCiAgICBHWSAgCiAgICBHWSAgCiIiIgpzMyA9ICIiIgogICAgUiAgICBQIAogICAgUiAgICBQIApBQUFBUkFBQUFQQQogICAgUiAgICBQIAogICAgUiAgICBQIApHR0dHUkdHRyBQIAogICAgUiAgICAgIAoiIiIKczQgPSAiIiIKIE8gWSAKUlJSWVIKIE8gWSAKR09HR0cKIE8gWSAKIiIiCnM1ID0gIiIiCllZWUIKICAgQgogICBCCiIiIgpkZWYgdG9fYm9hcmQocyk6CglyZXR1cm4gW1sqaV0gZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMuc3BsaXQoJ1xuJykpXQoKcHJpbnQoZih0b19ib2FyZChzMSkpKQpwcmludChmKHRvX2JvYXJkKHMyKSkpCnByaW50KGYodG9fYm9hcmQoczMpKSkKcHJpbnQoZih0b19ib2FyZChzNCkpKQpwcmludChmKHRvX2JvYXJkKHM1KSkp