input: Write a function to sort words in a given string by their length in decreasing alphabetical order. If two words have the same length, they should be sorted in alphabetical order. The function should return the sorted string.
  
  
  def sort_words_by_length_and_alphabet(my_string: str) -> str:
      words = my_string.split(' ')
      words_with_length = [(len(word), word) for word in words]
      words_with_length.sort(key=lambda x: (-x[0], x[1]))
      sorted_string = " ".join([i[1] for i in words_with_length])
      return sorted_string
  
  assert sort_words_by_length_and_alphabet("This is the string which is to be sorted") == "string sorted which the This to is be"
  assert sort_words_by_length_and_alphabet("quick brown fox jumps over the lazy dog") == "brown quick jumps over lazy the dog fox"
  assert sort_words_by_length_and_alphabet("a an to be or not to be") == "not to be or be an a"
  assert sort_words_by_length_and_alphabet("") == ""
  
output: def sort_words_by_length_and_alphabet(my_string: str) -> str:
      words = my_string.split(' ')
      words_with_length = [(len(word), word) for word in words]
      words_with_length.sort(key=lambda x: (-x[0], x[1]))
      sorted_string = " ".join([i[1] for i in words_with_length])
      return sorted_string