JavaScript ES6, 119 bytes
==============

 F=s=>(C=o=>--a.length?C(a.reduce((p,c,i)=>c+p.slice((a[i-1]=p.slice(0,c.length)).length)))+`
 `+o:o)(a=(s+`
 `).split`
 `)