$| = 1;

use bigint;

sub lift {
	my $n = shift;
	while ($n % 2 == 0) {
		$n /= 2;
	}
	return $n;
}

my @seen = ();
my @pow  = ();
my @pref = ();

sub a {
	my $n = shift;

	my $h = $pow[$n] ? 0 : 1;
	while (1) {
		my $num = $pref[$n] + (2**$pow[$n]) * $h;
		my $odd = lift($num);

		if ($seen[$odd]) {
			$h++;
		} else {
			$seen[$odd] = 1;

			my $p = 0;
			my $rem = $h;
			while ($rem) {
				my $d = $rem % 2;
				$rem = ($rem - $d)/2;

				if ($d && $p) {
					if ($pow[$n+$p]==0) {
						$pow[$n+$p] = $p;
					}
					$pref[$n+$p] += 2**($pow[$n+$p]-$p);
				}

				$p++;
			}

			return $num * 2**($n-1-$pow[$n]);
		}
	}
}

foreach my $n (1..10_000) {
	my $a = a($n);
	last if $a >= 10**1000;
	print "$n $a\n";
}