s = 0
unseen = 1
seen(v) = bit test(s, v)
see(v) = s = bit or(s, 2^v); while (seen(unseen), unseen++)

other(n) = {
	my (x=if (n < 2, 1, a[ floor(n/2) ]));
	for (v=unseen, oo,
		if (!seen(v) && gcd(x,v)==1,
			see(v);
			return (v);
		);
	);
}

{
	a = vector(10 000);
	for (n=1, #a,
		a[n] = other(n);
		print (n " " a[n]);
	);
	quit
}