input: Write a function to print a formatted table of grades for a given set of students. Each student is represented as a dictionary with 'name' and 'grade' keys. The table should adjust the width of the 'Name' column to accommodate the longest name and should print each student's name and grade as rows under the header. If the input list is empty, the function should just print a header with no rows.
  
  def print_grade_table(students):
      if not students:
          print("Name   Grade")
          print("-------------")
          return
      
      max_name_length = max(len(student['name']) for student in students)
      line_template = "{{name:<{max_name_length}}}   {{grade}}".format(max_name_length=max_name_length)
      header = line_template.format(name='Name', grade='Grade')
      sep = '-' * len(header)
      print(header)
      print(sep)
      for student in students:
          print(line_template.format(**student))
  
  assert print_grade_table([{'name': "John", 'grade': 92}, {'name': "Alice", 'grade': 95}, {'name': "Bob", 'grade': 87}]) == None
  assert print_grade_table([]) == None
output: def print_grade_table(students):
      if not students:
          print("Name   Grade")
          print("-------------")
          return
      
      max_name_length = max(len(student['name']) for student in students)
      line_template = "{{name:<{max_name_length}}}   {{grade}}".format(max_name_length=max_name_length)
      header = line_template.format(name='Name', grade='Grade')
      sep = '-' * len(header)
      print(header)
      print(sep)
      for student in students:
          print(line_template.format(**student))