big = 1 000 000 s = 0 S = Set([]) unseen = 1 seen(v) = if (v < big, bit test(s, v), set search(S, v)) see(v) = if (v < big, s = bit or(s, 2^v), S = set union(S, Set([v]))); while (seen(unseen), unseen++) M = 8 t = [] \\ previous digits ok(v, keep) = { my (d=digits(v), tt=t); for (i=1, #d, if (#tt < M, tt = concat(tt, d[i]), tt = concat(tt[2..#tt], d[i]); ); if (#tt==M && vecsum(tt)%M, return (0); ); ); if (keep, t = tt; ); return (1); } other() = { my (can = [0]); for (w=1, oo, my (newcan = []); for (c=1, #can, for (d=if (w==1, 1, 0), 9, my (v=can[c]*10 + d); if (ok(v, !seen(v)), if (!seen(v), see(v); return (v), newcan = concat(newcan, v); ); ); ); ); can = newcan; ); } for (n=1, 10 000, print (n " " other())) quit