step1 = ReplaceList[list1, {a__, b_, ___} :> b/{a}] step2 = FlattenAt[(Flatten /@ Thread[{list2[[;; Length@#1]], #1}]) & /@step1, 1]