class Solution:
def minPathSum(self, matrix: List[List[int]]) -> int:
import sys
sys.setrecursionlimit(100000)
from functools import lru_cache
@lru_cache(maxsize=None)
def dfs(i, j):
if i == 0 and j == 0: return matrix[i][j]
if i == 0: return sum(matrix[i][j] for j in range(j + 1))
if j == 0: return sum(matrix[i][j] for i in range(i + 1))
return matrix[i][j] + min(dfs(i - 1, j), dfs(i, j - 1))
m, n = len(matrix), len(matrix[0])
return dfs(m - 1, n - 1)