d=lambda t:t>{}and-~max(map(d,t+[0]))
s=lambda x,y:s(y,x)if d(y)<d(x)else map(s,(x,[x]*len(y))[d(x)<d(y)],y)if d(y)else(x or 0)+(y or 0)

for (x, y) in (
    (0, 0),
    ([-1, 0, -1], [1]),
    ([], [0]),
    ([], 0),
    ([], []),
    ([[], 0], []),
    ([1, 2, 3], 10),
    ([1, 2, 3], [10]),
    ([1, 2, 3], [10, [20]]),
    ([1, 2, 3, []], [10, [20]]),
    ([1, [2, [3, [4]]]], [10, [20]])
):
    print s(x, y)