left = ['W', 'S', 'C']
right = []
def pos(_left, _right):
if 'S' in _left:
if 'W' in _left or 'C' in _left:
return False
elif 'S' in _right:
if 'W' in _right or 'C' in _right:
return False
return True
def cross(_left, _right, dir, record, element = None):
if len(_right) == 3: return record
if dir: # src -> dst
for ele in _left:
if ele == element:
continue
l, r, rec = _left, _right, record
l.remove(ele)
if pos(l, r):
r.append(ele)
if pos(l, r):
rec.append(f"{ele} moves from src to dst")
record.append(cross(l, r, 0, rec, ele))
else:
print("Failed")
print(record)
print()
else:
print("Failed")
print(record)
print()
else: # dst -> src
for ele in _right:
if ele == element:
continue
l, r, rec = _left, _right, record
r.remove(ele)
if pos(l, r):
l.append(ele)
if pos(l, r):
rec.append(f"{ele} moves from dst to src")
record.append(cross(l, r, 1, rec, ele))
else:
print("Failed")
print(record)
print()
else:
print("Failed")
print(record)
print()
record.append(cross(_left, _right, 0, record))
return record
success = cross(left, right, 1, [])
print(success)