from itertools import *
E= enumerate
def f( w) :
C= 0 ; D= { i:( C:= C+1 ) if '|' == a else 0for i, a in E( w[ 0 ] ) } ; B= [ [ *i] for i in zip ( *w[ ::-1 ] ) ]
for I, j in E( B) :
for a, b in groupby( E( j) , key= lambda x:x[ 1 ] .lower ( ) ) :
u= [ *b]
if 'x' == a:
for A, _ in u:B[ I] [ A] = ' '
if v:= sum ( 2 *( t== 'X' ) -1for _, t in u) :B[ I] [ u[ -1 ] [ 0 ] ] = v
return '\n ' .join ( f'{D[i-1]} {D[i+1]} ' +[ 'L' , 'R' ] [ a== 1 ] for j in zip ( *B) for i, a in E( j) if a in [ 1 , -1 ] )
s0 = """
| | | |
X | |
| | x
| X |
| | | |
"""
s1 = """
| | | | | |
| | X x
X | x |
| x | X
X X | |
| | | | | |
"""
s2 = """
| | |
X |
| x
| | |
| X
| x
| | |
"""
s3 = """
|
"""
s4 = """
| |
X
x
X
x
X
x
X
x
X
x
| |
"""
s5 = """
| |
X
X
x
X
x
x
| |
"""
def to_board( s) :
return [ [ *i] for i in filter ( None , s.split ( '\n ' ) ) ]
print ( f( to_board( s0) ) )
print ( '-' *40 )
print ( f( to_board( s1) ) )
print ( '-' *40 )
print ( f( to_board( s2) ) )
print ( '-' *40 )
print ( f( to_board( s3) ) )
print ( '-' *40 )
print ( f( to_board( s4) ) )
print ( '-' *40 )
print ( f( to_board( s5) ) )
ZnJvbSBpdGVydG9vbHMgaW1wb3J0KgpFPWVudW1lcmF0ZQpkZWYgZih3KToKIEM9MDtEPXtpOihDOj1DKzEpaWYnfCc9PWEgZWxzZSAwZm9yIGksYSBpbiBFKHdbMF0pfTtCPVtbKmldZm9yIGkgaW4gemlwKCp3Wzo6LTFdKV0KIGZvciBJLGogaW4gRShCKToKICBmb3IgYSxiIGluIGdyb3VwYnkoRShqKSxrZXk9bGFtYmRhIHg6eFsxXS5sb3dlcigpKToKICAgdT1bKmJdCiAgIGlmJ3gnPT1hOgogICAgZm9yIEEsXyBpbiB1OkJbSV1bQV09JyAnCiAgICBpZiB2Oj1zdW0oMioodD09J1gnKS0xZm9yIF8sdCBpbiB1KTpCW0ldW3VbLTFdWzBdXT12CiByZXR1cm4nXG4nLmpvaW4oZid7RFtpLTFdfSB7RFtpKzFdfSAnK1snTCcsJ1InXVthPT0xXWZvciBqIGluIHppcCgqQilmb3IgaSxhIGluIEUoailpZiBhIGluWzEsLTFdKQogCnMwID0gIiIiCnwgfCB8IHwKIFggIHwgfAp8IHwgIHggCnwgIFggIHwKfCB8IHwgfAoiIiIKczEgPSAiIiIKfCB8IHwgfCB8IHwKfCB8ICBYICAgeCAKIFggIHwgIHggIHwKfCAgeCAgfCAgWCAKIFggICBYICB8IHwKfCB8IHwgfCB8IHwKIiIiCnMyID0gIiIiCnwgfCB8CiBYICB8CnwgIHggCnwgfCB8CnwgIFggCnwgIHggCnwgfCB8CiIiIgpzMyA9ICIiIgp8CiIiIgpzNCA9ICIiIgp8IHwKIFggCiB4IAogWCAKIHggCiBYIAogeCAKIFggCiB4IAogWCAKIHggCnwgfAoiIiIKczUgPSAiIiIKfCB8CiBYIAogWCAKIHggCiBYIAogeCAKIHggCnwgfAoiIiIKZGVmIHRvX2JvYXJkKHMpOgoJcmV0dXJuIFtbKmldZm9yIGkgaW4gZmlsdGVyKE5vbmUsIHMuc3BsaXQoJ1xuJykpXQoKcHJpbnQoZih0b19ib2FyZChzMCkpKQpwcmludCgnLScqNDApCnByaW50KGYodG9fYm9hcmQoczEpKSkKcHJpbnQoJy0nKjQwKQpwcmludChmKHRvX2JvYXJkKHMyKSkpCnByaW50KCctJyo0MCkKcHJpbnQoZih0b19ib2FyZChzMykpKQpwcmludCgnLScqNDApCnByaW50KGYodG9fYm9hcmQoczQpKSkKcHJpbnQoJy0nKjQwKQpwcmludChmKHRvX2JvYXJkKHM1KSkp