text: from typing import Tuple
  
  
  def edits_1(word: str) -> set:
      """All edits that are one edit away from `word`."""
      assert isinstance(word, str), '{} must be a string'.format(word)
      letters = 'abcdefghijklmnopqrstuvwxyz'
      splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
      deletes = [L + R[1:] for L, R in splits if R]
      transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R) > 1]
      replaces = [L + c + R[1:] for L, R in splits if R for c in letters]
      inserts = [L + c + R for L, R in splits for c in letters]
      return set(deletes + transposes + replaces + inserts)
  
  
  def edits_n(word: str, dist: int = 2, k: int = None) -> Tuple[str]:
      """All edits that are `n` edits away from `word`."""
      if k is None:
          k = dist
      assert dist > 0 and k > 0
      if k == 1:
          return edits_1(word)
      new_words = tuple(
          w2 for w1 in edits_1(word)
          for w2 in edits_n(w1, dist, k - 1))
      return tuple(set(new_words)) if k == dist else new_words
  