s = 0 unseen = 0 seen(v) = bit test(s, v) see(v) = s = bit or(s, 2^v); while (seen(unseen), unseen++) base = 10 has(m,n) = { my (w=base^#digits(n, base)); while (m>=n, if (m%w==n, return (1), m\=base); ); return (0); } other(p) = { see(p); for (v=unseen, oo, if (!seen(v) && (has(p*v, p) || has(p*v, v)), return (v); ); ); } { for (n=0, 10 000, print (n " " v=if (n==0, 0, other(v))); ); } quit