s = 0 unseen = 1 seen(v) = bit test(s, v) see(v) = s = bit or(s, 2^v); while (seen(unseen), unseen++) other(pp,p,m) = { forstep (v=unseen + (unseen%2 != m), oo, 2, if (!seen(v) && gcd(v, p)==1 && gcd(v, pp)>1, return (v); ); ); } { for (n=1, 10 000, if (n<=3, v = n, v = other(pp, p, n%2); ); see(v); print (n " " v); [pp,p]=[p,v]; ); } quit