input: Write a function to calculate the edit distance between two strings using dynamic programming. The function should return the minimum number of operations (insertions, deletions, or substitutions) required to transform one string into the other. If either of the strings is empty, the edit distance should be equal to the length of the non-empty string.
  assert edit_distance("kitten", "sitting")==3
  assert edit_distance("intention", "execution")==5
  assert edit_distance("", "word")==4
  assert edit_distance("python", "typhon")==2
  assert edit_distance("", "")==0
output: def edit_distance(str1, str2):
      m, n = len(str1), len(str2)
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      for i in range(m + 1):
          for j in range(n + 1):
              if i == 0:
                  dp[i][j] = j
              elif j == 0:
                  dp[i][j] = i
              elif str1[i-1] == str2[j-1]:
                  dp[i][j] = dp[i-1][j-1]
              else:
                  dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])
      
      return dp[m][n]