def solve(data):
to_visit = [START]
DIR4 = dir4()
ret = 0
while to_visit:
new_visit = []
for p in to_visit:
if p == GOAL:
return ret
v = data[p]
data[p] = -1
if v > 0: # WARP
for p2 in WARP[v]:
data[p2] = 0
new_visit.append(p2)
WARP[v] = []
for d in DIR4:
p2 = p + d
if data[p2] >= 0:
new_visit.append(p2)
to_visit = set(new_visit)
ret += 1
return -1