code: def n_at_a_time(
      items: List[int], n: int, fillvalue: str
  ) -> Iterator[Tuple[Union[int, str]]]:
      
      it = iter(items)
      return itertools.zip_longest(*[it] * n, fillvalue=fillvalue)
docs: Returns an iterator which groups n items at a time.
      Any final partial tuple will be padded with the fillvalue
  
      >>> list(n_at_a_time([1, 2, 3, 4, 5], 2, 'X'))
      [(1, 2), (3, 4), (5, 'X')]