procedure main(A) every writes((!lis(A)||" ") | "\n") end procedure lis(A) r := [A[1]] | fail every (put(pt := [], [v := !A]), p := !pt) do if put(p, p[-1] < v) then r := (*p > *r, p) else p[-1] := (p[-2] < v) return r end