### openLock 
from collections import deque
from typing import *
def f_gold(deadends: List[str], target: str) -> int:
    def next(s):
        res = []
        s = list(s)
        for i in range(4):
            c = s[i]
            s[i] = '9' if c == '0' else str(int(c) - 1)
            res.append(''.join(s))
            s[i] = '0' if c == '9' else str(int(c) + 1)
            res.append(''.join(s))
            s[i] = c
        return res
    def extend(m1, m2, q):
        for _ in range(len(q)):
            p = q.popleft()
            step = m1[p]
            for t in next(p):
                if t in s or t in m1:
                    continue
                if t in m2:
                    return step + 1 + m2[t]
                m1[t] = step + 1
                q.append(t)
        return -1
    def bfs():
        m1, m2 = {"0000": 0}, {target: 0}
        q1, q2 = deque([('0000')]), deque([(target)])
        while q1 and q2:
            t = extend(m1, m2, q1) if len(q1) <= len(q2) else extend(m2, m1, q2)
            if t != -1:
                return t
        return -1
    if target == '0000':
        return 0
    s = set(deadends)
    if '0000' in s:
        return -1
    return bfs()