allocate mem(2^30) row(n) = { my (r = []); while (n, my (v = valuation(n+n%2, 2)); n \= 2^v; r = concat(v, r)); my (s = [if (#r, 2^r[1]-1, 0)]); for (k = 2, #r, s = concat(s * 2^r[k], [(h+1)*2^r[k]-1|h<-s]);); vecsort(s); } { a = vector(2^13); u = 1; m = 0; print ("0 0"); for (n=1, oo, if (bitand(n, n\2)==0, r = row(n); for (k=1, #r, if (!a[r[k]], a[r[k]] = m++; while (a[u], print (u " " a[u]); if (u++ > #a, break (3); ); ); ); ); ); ); } quit