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 } inv(n) = { my (r=toruns(n), s=vector(#r)); for (k=1, #r, s[r[k]]=k; ); fromruns(s); } { vv=[0]; nb=0; for (w=1, 7, forperm (w, p, if (#vv