toruns(n) = { my (r=[]); while (n, my (v=valuation(n+n%2, 2)); n\=2^v; r=concat(v, r)); r } fromruns(r) = { my (v=0); for (k=1, #r, v=(v+k%2)*2^r[k]-k%2); v } back(r) = { my (p=[], m=0); for (k=1, #r, if (r[k]>1, if (m, p=concat(p, -m); m=0; ); p=concat(p, r[k]-1); ); if (k!=#r, m++; ); ); if (m, p=concat(p, -m); ); p } fetch(p,v,i) = { my (o=(v%2)==0); if (i++>#p, if (nb++>#vv, vv=concat(vv, vector(#vv)); ); vv[nb]=v, p[i]>0, fetch(p,(v+o)*2^p[i]-o,i), for (m=0, 2^(-p[i]-1)-1, fetch(p,v*2^-p[i]+o*2^(-p[i]-1)+m,i); ); ); } a(n) = { vv=[0]; nb=0; fetch(back(toruns(n)), 0, 0); #Set(vv[1..nb]) } for (n=1, 2^13, print (n " " a(n))) quit