toruns(n) = { my (r=[], s=0); while (n, my (v=valuation(n+n%2, 2)); n\=2^v; r=concat(r, s+=v)); r } R = apply(toruns, [0..M=2^9-1]) row(n) = select(k -> setintersect(R[1+k], R[1+n])==R[1+k], [0..M]) m=-1; for (n=0, M, apply(v -> print (m++ " " v), row(n))) quit