allocate mem(2^30)

big = 10 000 000
s = 0
S = Set([])
unseen = 1
seen(v) = if (v < big, bit test(s, v), set search(S, v))
see(v) = if (v < big, s = bit or(s, 2^v), S = set union(S, Set([v]))); while (seen(unseen), unseen++)

{
	a = vector(10 001, k, -1);
	u = 0;

	for (n=0, oo,
		if (n<=1,
				v = n,
				if (v%2==0 && !seen(v/2),
						v = v/2,
						v = 3*v + (v%2)
				);
		);

		see(v);

		if (v<#a && a[1+v]<0,
			a[1+v]=n;
			while (a[1+u]>=0,
				print (u " " a[1+u]);
				u++;
				if (u==#a,
					break (2);
				);
			);
		);
	);
}

quit