procedure befriend_con(s) local lseq, i, tail s := copy(s) lseq := [get(s)] | return [] while i := get(s) do lseq |||:= connect(lseq[-1], i) return lseq end procedure connect(j, i) local k, result result := [] k := i - j if abs(k) = 1 then put(result, i) else if k = 0 then put(result, i + ?[1, -1], i) else if k > 0 then every put(result, j + 1 to i) else every put(result, j - 1 to i by -1) return result end