a = vector(10 000)
unseen = 1

{
	for (k=1, oo,
		my (f=1/max(k,2));

		while (1,
			my (v=floor(f));
			if (v > #a,
				break;
			);

			if (v && a[v]==0,
				a[v] = k;
				while (unseen <= #a && a[unseen],
					print (unseen " " a[unseen]);
					unseen++;
				);
			);

			f *= 2;
		);

		if (unseen > #a,
			break;
		);
	);
}

quit