<prompt> Una kufuli mbele yako na magurudumu 4 ya mviringo. Kila gurudumu lina nafasi 10: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Magurudumu yanaweza kuzunguka kwa uhuru na kujikunja: kwa mfano tunaweza kugeuza 9 kuwa 0, au 0 kuwa 9. Kila hoja inajumuisha kugeuza gurudumu moja slot moja.Kufuli huanza kwa 0000, mfuatano unaowakilisha hali ya magurudumu manne.Umepewa orodha ya ncha zisizokufa za deadends, kumaanisha ikiwa kufuli itaonyesha misimbo yoyote kati ya hizi, magurudumu ya kufuli yataacha kugeuka na hutaweza kuifungua.Kwa kuzingatia lengo linalowakilisha thamani ya magurudumu ambayo yatafungua kufuli, rudisha idadi ya chini kabisa ya zamu zinazohitajika ili kufungua kufuli, au -1 ikiwa haiwezekani.Mfano wa 1:Ingizo: deadends 0201 , 0101 , 0102 , 1212 , 2002 , lengo 0202 Pato: 6Maelezo:Msururu wa hatua halali utakuwa 0000 - 1000 - 1100 - 1200 - 1201 - 1202 - 0202.Kumbuka kwamba mlolongo kama 0000 - 0001 - 0002 - 0102 - 0202 hautakuwa sahihi,kwa sababu magurudumu ya kufuli hukwama baada ya onyesho kuwa mwisho wa mwisho 0102.Mfano wa 2:Ingizo: deadends 8888 , lengo 0009Pato: 1Maelezo: Tunaweza kugeuza gurudumu la mwisho ili kuondoka kutoka 0000 - 0009.Mfano wa 3:Ingizo: deadends 8887 , 8889 , 8878 , 8898 , 8788 , 8988 , 7888 , 9888 , target 8888 Pato: -1Maelezo: Hatuwezi kufikia lengo bila kukwama.Vikwazo: 1 deadends.length 500 wafui.urefu 4 target.length 4 lengo halitakuwa katika orodha wafu. target na deaddesi zinajumuisha tarakimu pekee.  <response>: kutoka kwa makusanyo kuagiza dequedef openLock wafu, walengwa: wafu kuweka wafu alitembelea set q deque0000 ikiwa 0000 imekufa: kurudi -1 alitembelea.ongeza0000 hatua 0 wakati q: level_size lenq kwa mimi katika anuwailevel_size: cur q.popleft ikiwa cur lengo: kurudi hatua kwa j katika safu4: kwa k katika -1, 1: next_val cur:j strintcurj k 10 10 curj 1: ikiwa next_val haijatembelewa na next_val haijafa: alitembelea.ongezaijayo_val q.ongezaijayo_val hatua 1 kurudi -1 