allocate mem(2^30) W = 100 T = matrix(2*W+1, 2*W+1, x,y, -1) get(z) = my (x=real(z), y=imag(z)); if (min(x,y)>0 && max(x,y)<=#T, T[x,y], -1) set(z,v) = my (x=real(z), y=imag(z)); T[x,y] = v U = vector(4, k, I^(k-1)) K = concat(U*(2+I), U*(2-I)) compute(z) = { my (x=0); for (k=1, #K, my (v = get(z+K[k])); if (v>=0, x = bitor(x, 2^v); ); ); valuation(1+x,2); } { z=(W+1)*(1+I); n=0; k=0; dir=1; for (w=1, oo, for (t=1, 2, for (i=1, w, n++; v = compute(z); set(z, v); if (v==4, print (k++ " " n-1); ); if (n==(2*W+1)^2, break (3); ); z+=dir; ); dir*=I; ); ); } quit