input: 
  class Song:
      def __init__(self, title, artist):
          self.title = title
          self.artist = artist
    
      def __str__(self):
          return f'Title: {self.title}\nArtist: {self.artist}'
      
      def __eq__(self, other):
          return self.artist == other.artist and self.title == other.title
  
      def length(self):
          return len(self.title)
  
  # Test Cases:
  # Example 1
  song1 = Song("Bohemian Rhapsody", "Queen")
  song2 = Song("Bohemian Rhapsody", "Queen")
  assert song1.__str__() == 'Title: Bohemian Rhapsody\nArtist: Queen'
  assert song1.__eq__(song2) == True
  assert song1.length() == 17
  
  # Example 2
  song3 = Song("Yesterday", "The Beatles")
  song4 = Song("Yesterday", "The Rolling Stones")
  assert song3.__str__() == 'Title: Yesterday\nArtist: The Beatles'
  assert song3.__eq__(song4) == False
  assert song3.length() == 9
  
output:     def __lt__(self, other):
          return self.title < other.title if self.artist == other.artist else self.artist < other.artist
  
      def __gt__(self, other):
          return self.title > other.title if self.artist == other.artist else self.artist > other.artist
  
      def __le__(self, other):
          return self.__lt__(other) or self.__eq__(other)
  
      def __ge__(self, other):
          return self.__gt__(other) or self.__eq__(other)
  
  # Test Cases:
  # Example 3
  song5 = Song("Imagine", "John Lennon")
  song6 = Song("Imagine", "John Lennon")
  assert song5.__lt__(song6) == False
  assert song5.__gt__(song6) == False
  assert song5.__le__(song6) == True
  assert song5.__ge__(song6) == True
  
  # Example 4
  song7 = Song("Hotel California", "Eagles")
  song8 = Song("Hotel California", "The Eagles")
  assert song7.__lt__(song8) == True
  assert song7.__gt__(song8) == False
  assert song7.__le__(song8) == True
  assert song7.__ge__(song8) == False