binz(n) = fromdigits(binary(n)) { print ("n a(n) bin(n) {bin(k)}"); print ("0 1 0 {0}"); a = vector(16, n, [n]); for (n=1, #a, b = binary(n); for (i=1, #b, for (j=i, #b, m = fromdigits(concat([b[1..j], b[i..#b]]), 2); if (m>#a, break, a[m] = setunion(a[m], a[n]); ); ); ); print (n " " #a[n] " " binz(n) " " apply(binz, a[n])); ); } quit