todualzeck0(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 = [todualzeck0(1)] todualzeck(n) = { while (#cache < n, cache = concat(cache, apply (todualzeck0, [#cache+1..2*#cache])); ); if (n, cache[n], 0) } missing(n) = 2^#binary(n)-1-n s = 0 unseen = 0 seen(v) = bittest(s, v) see(v) = s = bitor(s, 2^v); while (seen(unseen), unseen++) other(p) = { see(p); my (mp = missing(todualzeck(p))); for (v = unseen, oo, if (!seen(v) && bitand(missing(todualzeck(v)), mp)==0, return (v); ); ); } for (n = 0, 10 000, print (n " " v = if (n==0, 0, other(v)))) quit