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 } { W = 13; \\ count R = vector(W, w, vector(w)); for (n = 1, 2^W-1, w = #binary(n); r = #toruns(n); R[w][r]++; ); \\ list V = vector(W, w, vector(w, r, vector(R[w][r]))); C = vector(W, w, vector(w)); for (n = 1, 2^W-1, w = #binary(n); r = #toruns(n); V[w][r][C[w][r]++] = n; ); \\ associate a = vector(2^W-1); for (w = 1, W, for (r = 1, w, for (k = 1, #V[w][r], a[V[w][r][k]] = V[w][r][#V[w][r]+1-k]; ); ); ); print ("0 0"); for (n = 1, #a, print (n " " a[n]); ); } quit