base = 10 explore(x, f) = { nb++; while (f++<=#ext, for (k=1, #ext[f], if (bitand(x, ext[f][k])==0, explore (x+ext[f][k], f); ); ); ); } a(n) = { nb=0; if (n==0, nb++, ext = vector(min(n, base-1), k, []); for (d=1, base-1, my (m=0, x=n-1); while (!bittest(m, x), m+=2^x; x=(x-d)%n; ); for (k=1, min(1+valuation(m,2), #ext), ext[k]=concat(ext[k], m); m>>=1; ); ); apply (x -> explore(x, 1), ext[1]); ); return (nb); } for (n=0, 10 000, print (n " " a(n))) quit