input: Write a function to print a formatted table of grades for a given set of students. The students are represented as a list of dictionaries, where each dictionary contains 'name' and 'grade' keys. Ensure the table is properly aligned by dynamically adjusting the width based on the longest student name. Return nothing but print the formatted table with headers and appropriate spacing.
  assert print_grade_table([{'name': "John", 'grade': 92}, {'name': "Alice", 'grade': 95}, {'name': "Bob", 'grade': 87}])
  assert print_grade_table([{'name': "Allyson", 'grade': 89}, {'name': "Tim", 'grade': 75}])
output: def print_grade_table(students):
      max_name_length = max(len(student['name']) for student in students)
      header_format = f"{{:<{max_name_length}}}  Grade"
      row_format = f"{{:<{max_name_length}}}  {{:>5}}"
      
      print(header_format.format("Name"))
      print("-" * (max_name_length + 6))
      
      for student in students:
          print(row_format.format(student['name'], student['grade']))