# Pastebin RtaAP8sh gamenst :: Int -> [Int] -> Int gamenst nth inp = runST $ do prevs <- MV.replicate nth (-1) traverse_ (uncurry (MV.write prevs)) (zip inp [1..]) foldM (\n pos -> do p <- MV.unsafeRead prevs n MV.unsafeWrite prevs n pos pure (pos - if p == -1 then pos else p)) 0 [length inp + 1 .. nth - 1]