Python Ladder
def ladder(a: list[int], b: list[int]) -> list[int]:
size = len(a)
mod = (1 << max(b)) - 1
fib = [0, 1]
for i in range(2, max(a) + 2):
fib.append((fib[i - 1] + fib[i - 2]) & mod)
result = [0] * size
for i in range(size):
result[i] = fib[a[i] + 1] & ((1 << b[i]) - 1)
return result
This precomputes climb counts once and applies the modulo per query, which avoids recalculating the same paths over and over.