let type any = {any : int} var buffer := getchar() function readint(any : any) : int = let var i := 0 function isdigit(s : string) : int = ord("0") <= ord(s) & ord(s) <= ord("9") function skipto() = while buffer = " " | buffer = "\n" do buffer := getchar() in skipto(); any.any := isdigit(buffer); while isdigit(buffer) do (i := i * 10 + ord(buffer) - ord("0"); buffer := getchar()); i end type list = {first : int, rest : list} function readlist() : list = let var any := any{any=0} var i := readint(any) in if any.any then list{first=i,rest=readlist()} else nil end function merge(a : list, b : list) : list = if a = nil then b else if b = nil then a else if a.first < b.first then list {first = a.first, rest = merge(a.rest, b)} else list {first = b.first, rest = merge(a, b.rest)} function printint(i : int) = let function f(i : int) = if i > 0 then (f(i/10); print (chr(i-i/10*10+ord("0")))) in if i < 0 then (print("-"); f(-i)) else if i>0 then f(i) else print("0") end function printlist(l : list) = if l = nil then print("\n") else (printint(l.first); print(" "); printlist(l.rest)) var list1 := readlist() var list2 := (buffer := getchar(); readlist()) in printlist(merge(list1,list2)) end