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