procedure mcodes(n, k) /k := *&cset if n % 2 ~= 0 then fail odds := "" evens := "" every odds ||:= (1 to n by 2) every evens ||:= (2 to n by 2) old_codes := [""] new_codes := [] repeat { new_codes := [] every code := !old_codes do every put(new_codes, code || (!odds || !evens)) if *new_codes >= k then break old_codes := new_codes } return new_codes[1+:k] end