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