todualzeck(n) = { my (s=0, v=0); for (i=0, oo, if (s>=n, forstep (j=i-1, 0, -1, if (s-fibonacci(2+j)>=n, s-=fibonacci(2+j); v-=2^j; ); ); return (v); ); s+=fibonacci(2+i); v+=2^i; ); } cache = apply(todualzeck, [0..M=fibonacci(14)]) todualzeck(n) = cache[1+n] row(n) = { my (zn = todualzeck(n), zk); select(k -> bitand(zk=todualzeck(k), zn)==zk, [0..M]); } { m = -1; for (n=0, M, r = row(n); apply (v -> print (m++ " " v), r); ); }