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);
}

tr(n) = if (n>=0, 1+2*n, -2*n)

xx = vector(1+2*M=100)
yy = vector(#xx)

{
	z=0;
	n=-1;
	while (1,
		x = tr(real(z)-imag(z));
		y = tr(real(z)+imag(z));
		if (x>#xx || y>#yy,
			break;
		);
		av = bitor(xx[x], yy[y]);
		b = valuation(av+1,2);
		print (n++ " " b);
		xx[x] += 2^b;
		yy[y] += 2^b;

		z=move(z);
	);
}

quit