Node:
value
next
init(v, n?):
dup
value = v
next = n
concat(n?):
next = n
f(n?, x):
if !n || x < n.value:
Node.init(x, n)
else:
n.concat(f(n.next, x))
merge(n1?, n2?):
if !n1:
n1 = n2
else:
if n2:
f(n1, n2.value)
merge(n1, n2.next)
Tm9kZToKICAgIHZhbHVlCiAgICBuZXh0CiAgICBpbml0KHYsIG4/KToKICAgICAgICBkdXAKICAgICAgICB2YWx1ZSA9IHYKICAgICAgICBuZXh0ID0gbgogICAgY29uY2F0KG4/KToKICAgICAgICBuZXh0ID0gbgogCmYobj8sIHgpOgogICAgaWYgIW4gfHwgeCA8IG4udmFsdWU6CiAgICAgICAgTm9kZS5pbml0KHgsIG4pCiAgICBlbHNlOgogICAgICAgIG4uY29uY2F0KGYobi5uZXh0LCB4KSkKIAptZXJnZShuMT8sIG4yPyk6CiAgICBpZiAhbjE6CiAgICAgICAgbjEgPSBuMgogICAgZWxzZToKICAgICAgICBpZiBuMjoKICAgICAgICAgICAgZihuMSwgbjIudmFsdWUpCiAgICAgICAgICAgIG1lcmdlKG4xLCBuMi5uZXh0KQ==