require "table2" local fmt = require "fmt" local function ncs(a) local f = "%d " if type(a[1]) == "string" then for i = 1, #a do a[i] = a[i]:byte(1) end f = "%c " end local function generate(m, k, c) if k == m then if c[m] != c[1] + m - 1 then for i = 1, m do fmt.write(f, a[c[i]]) end print() end else for j = 1, #a do if k == 0 or j > c[k] then c[k + 1] = j generate(m, k + 1, c) end end end end for m = 2, #a - 1 do local c = table.rep(m, 0) generate(m, 0, c) end end local a = {1, 2, 3, 4} ncs(a) print() local ca = {"a", "b", "c", "d", "e"} ncs(ca)