f=->x,y{d=->a{-~a.map(&d).max||0 rescue 0}
d[x]<d[y]?y.map{|e|f[x,e]}:d[x]>d[y]?x.map{|e|f[e,y]}:d[x]<1?x+(y||0):[*x.zip(y).map{|a,b|f[a,b]},*y[x.size..-1]]}
p f[[1, [2, [3, [4]]]] , [10, [20]]]
p f[[-1, 0, 1] , [1]]
Zj0tPngseXtkPS0+YXstfmEubWFwKCZkKS5tYXh8fDAgcmVzY3VlIDB9CmRbeF08ZFt5XT95Lm1hcHt8ZXxmW3gsZV19OmRbeF0+ZFt5XT94Lm1hcHt8ZXxmW2UseV19OmRbeF08MT94Kyh5fHwwKTpbKnguemlwKHkpLm1hcHt8YSxifGZbYSxiXX0sKnlbeC5zaXplLi4tMV1dfQoKcCBmW1sxLCBbMiwgWzMsIFs0XV1dXSAsIFsxMCwgWzIwXV1dCnAgZltbLTEsIDAsIDFdICwgWzFdXQ==