base = 4 nb(n,d) = my (k=0); while (n, if (n%base==d, k++); n\=base); k f(n) = 1 + nb(n,1) g(n) = 1 + nb(n,2) gg = [] u = 0 other(n) = { my (i=f(n)); while (#gg < i || #gg[i]==0, my (j=g(u)); while (#gg < j, gg = concat(gg, [[]]); ); gg[j] = concat(gg[j], u); u++; ); my (v=gg[i][1]); gg[i] = gg[i][2..-1]; return (v); } for (n=0, 4^6-1, print (n " " v=other(n))) quit