allocate mem(2^30) 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) dz = [1, 1+I, I, I-1, -1, -1-I, -I, 1-I] neighbours(z) = apply(d -> d+z, dz) { print (0" "tot=0); gen = [0, 1]; for (n=1, 2^13, print (n " " tot+=#gen); apply(see, gen); ngen = Set(concat(apply(neighbours, gen))); gen = select(z -> !seen(z) && vecsum(apply(seen, neighbours(z)))==2, ngen); ); } quit