code: def intersperse(e, iterable, n=1):
      
      if n == 0:
          raise ValueError('n must be > 0')
      elif n == 1:
          # interleave(repeat(e), iterable) -> e, x_0, e, e, x_1, e, x_2...
          # islice(..., 1, None) -> x_0, e, e, x_1, e, x_2...
          return islice(interleave(repeat(e), iterable), 1, None)
      else:
          # interleave(filler, chunks) -> [e], [x_0, x_1], [e], [x_2, x_3]...
          # islice(..., 1, None) -> [x_0, x_1], [e], [x_2, x_3]...
          # flatten(...) -> x_0, x_1, e, x_2, x_3...
          filler = repeat([e])
          chunks = chunked(iterable, n)
          return flatten(islice(interleave(filler, chunks), 1, None))
docs: Intersperse filler element *e* among the items in *iterable*, leaving
      *n* items between each filler element.
  
          >>> list(intersperse('!', [1, 2, 3, 4, 5]))
          [1, '!', 2, '!', 3, '!', 4, '!', 5]
  
          >>> list(intersperse(None, [1, 2, 3, 4, 5], n=2))
          [1, 2, None, 3, 4, None, 5]