code: def stagger(iterable, offsets=(-1, 0, 1), longest=False, fillvalue=None):
      
      children = tee(iterable, len(offsets))
  
      return zip_offset(
          *children, offsets=offsets, longest=longest, fillvalue=fillvalue
      )
docs: Yield tuples whose elements are offset from *iterable*.
      The amount by which the `i`-th item in each tuple is offset is given by
      the `i`-th item in *offsets*.
  
          >>> list(stagger([0, 1, 2, 3]))
          [(None, 0, 1), (0, 1, 2), (1, 2, 3)]
          >>> list(stagger(range(8), offsets=(0, 2, 4)))
          [(0, 2, 4), (1, 3, 5), (2, 4, 6), (3, 5, 7)]
  
      By default, the sequence will end when the final element of a tuple is the
      last item in the iterable. To continue until the first element of a tuple
      is the last item in the iterable, set *longest* to ``True``::
  
          >>> list(stagger([0, 1, 2, 3], longest=True))
          [(None, 0, 1), (0, 1, 2), (1, 2, 3), (2, 3, None), (3, None, None)]
  
      By default, ``None`` will be used to replace offsets beyond the end of the
      sequence. Specify *fillvalue* to use some other value.