input: Write a function to print a formatted table of grades for a given set of students. If the list of students is empty, the function should print "No students provided". The function should take a list of dictionaries as input, where each dictionary represents a student and contains 'name' and 'grade' keys. Ensure the table is neatly aligned by using the maximum length of student names for formatting.
  def print_grade_table(students):
      if not students:
          print("No students provided")
          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}]) 
  # Output:
  # Name      Grade
  # -------   ----
  # John        92
  # Alice       95
  # Bob         87
  
  assert print_grade_table([]) 
  # Output:
  # No students provided
output: def print_grade_table(students):
      if not students:
          print("No students provided")
          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))