explore(v, ni, ki) = { if (v>=mx[ni+ki], mx[ni+ki]=max(v,mx[ni+ki]); if (ni<=#nn, explore(2*v+nn[ni], ni+1, ki); ); if (ki<=#kk, explore(2*v+kk[ki], ni, ki+1); ); ); } T(n,k) = { nn = if (n, binary(n), [0]); kk = if (k, binary(k), [0]); mx = vector(#nn+#kk+2, l, -oo); explore(0, 1, 1); mx[#mx]; } a(n) = T(n,n) for (n=0, 2^13, print (n " " a(n))) quit