--- /dev/null
+let
+
+ type any = {any : int}
+ var buffer := getchar()
+
+function readint(any: any) : int =
+ let var i := 0
+ function isdigit(s : string) : int =
+ ord(buffer)>=ord("0") & ord(buffer)<=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())
+
+
+ /* BODY OF MAIN PROGRAM */
+ in printlist(merge(list1,list2))
+end
+