tr(v)=if (v>=0, 1+2*v, -2*v) big = 100000 s = [] S = [] seen(z)=my (x=tr(real(z)),y=tr(imag(z)));if (max(x,y)>big, setsearch(S,z), x>#s, 0, bittest(s[x],y)) see(z)=my (x=tr(real(z)),y=tr(imag(z)));if (max(x,y)>big, S=setunion(S,Set(z)); return, x>#s, s=concat(s,vector(x-#s))); s[x]=bitor(s[x],2^y) move(z) = { if (real(z)==imag(z), real(z)+1, z+I) } pos = [[0]] nb = [0] compute(z) = { for (v=1, oo, my (ok=1); forstep (k=nb[v], 1, -1, if (seen(z - pos[v][k]), ok = 0; break ); ); if (ok, for (k=1, nb[v], see(z - pos[v][k]); see(pos[v][k] - z); ); nb[v]++; if (#pos[v] < nb[v], pos[v] = concat(pos[v], vector(#pos[v])); ); pos[v][nb[v]] = z; if (v==#pos, pos = concat(pos, [[0]]); nb = concat(nb, 0); ); return (v-1); ); ); } { z=0; n=0; while (real(z)<141, print (n++ " " compute(z)); z = move(z); ); } quit