input: Write a function that takes two strings as arguments and returns the longest common substring between them. If there is no common substring, return an empty string. If the given strings are empty, return an empty string.
  
  assert longest_substring("abcdabcdabde", "defabcdabcd") == "abcdabcd"
  assert longest_substring("abcdef", "ghijkl") == ""
  assert longest_substring("abc", "abc") == "abc"
  assert longest_substring("", "") == ""
  assert longest_substring("a", "") == ""
  assert longest_substring("xyz", "xy") == "xy"
output: def longest_substring(s1, s2):
      m, n = len(s1), len(s2)
      max_len = 0
      end_index = 0
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      for i in range(1, m + 1):
          for j in range(1, n + 1):
              if s1[i - 1] == s2[j - 1]:
                  dp[i][j] = dp[i - 1][j - 1] + 1
                  if dp[i][j] > max_len:
                      max_len = dp[i][j]
                      end_index = i
      
      return s1[end_index - max_len:end_index]