from collections import deque
def solution(maps):
n, m = len(maps), len(maps[0])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
start = lever = exit_pos = None
for x in range(n):
for y in range(m):
if maps[x][y] == 'S':
start = (x, y)
elif maps[x][y] == 'L':
lever = (x, y)
elif maps[x][y] == 'E':
exit_pos = (x, y)
def bfs(x, y, target_pos):
queue = deque([(x, y, 0)])
visited = [[False] * m for _ in range(n)]
visited[x][y] = True
while queue:
x, y, dist = queue.popleft()
if (x, y) == target_pos:
return dist
for k in range(4):
nx, ny = x + dx[k], y + dy[k]
if 0 <= nx < n and 0 <= ny < m:
if not visited[nx][ny] and maps[nx][ny] != 'X':
visited[nx][ny] = True
queue.append((nx, ny, dist + 1))
return -1
dist_to_lever = bfs(start[0], start[1], lever)
if dist_to_lever == -1:
return -1
dist_to_exit = bfs(lever[0], lever[1], exit_pos)
if dist_to_exit == -1:
return -1
answer = dist_to_lever + dist_to_exit
return answer