allocate mem(2^30); is(n) = { n%2==0 && n>2 && hammingweight(n)%2==1 } back(n) = { my (v=0, b=binary(n+1), x=0); forstep (k=#b, 1, -1, b[k] = x=bitxor(x, b[k]); ); fromdigits(b, 2); } { k=-1; for (n=0, 26, print ("#"n); if (n==0, r = [1], r = setunion(2*r, Set(apply(back, select(is, r)))) ); apply(v -> print (k++ " " v), r); ); } quit