rem = List([1])	\\ remaining values
free = 2		\\ next free value
nth(n) = {
	if (n > #rem,
		rem = Vec(rem);
		while (n > #rem,
			rem = concat(rem, [free..2*free-1]);
			free *= 2;
		);
		rem = List(rem);
	);
	my (v=rem[n]);
	listpop(rem, n);
	return (v);
}

{
	my (a = vector(10 000),
		u = 1,
		k = 0);
	for (n=1, oo,
		for (d=1, n,
			my (v=nth(d));
			k++;
			if (v<=#a,
				a[v] = k;
				while (u<=#a && a[u],
					print (u " " a[u]);
					if (u++ > #a,
						break (3);
					);
				);
			);
		);
	);
}

quit