a(n, base=2) = {
	my (d=if (n, digits(n, base), [0]), nb=vector(#d));
	for (i=1, #d,
		for (j=0, i-1,
			my (m=fromdigits(d[j+1..i], base));
			nb[i]=if (j==0, [m], setunion(nb[i], Set(apply(p -> bitor(p, m), nb[j]))));
		);
	);
	#nb[#d];
}

for (n=0, 2^14, print (n " " a(n)))

quit