big = 1 000 000 s = 0 S = Set([]) unseen = 0 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++) tr(n) = if (n>0, 2*n, 1-2*n) row = vector(1+2*M=50) col = vector(#row) move(z) = { my (w=max(abs(real(z)), abs(imag(z)))); if (imag(z)==-w, z+1, real(z)==-w, z-I, imag(z)==+w, z-1, z+I); } \\ i-th number with no bit in common with x avoid(x,i) = { if (x==0 || i==0, i, x%2, 2*avoid(x\2, i), 2*avoid(x\2, i\2)+i%2) } { n=-1; z=0; while (max(abs(x=real(z)), abs(y=imag(z)))<=M, prv = bitor(col[tr(x)], row[tr(y)]); for (i=0, oo, if (!seen(v=avoid(prv,i)) && bitand(prv, v)==0, print (n++ " " v); see(v); col[tr(x)] += v; row[tr(y)] += v; break; ); ); z=move(z); ); } quit