#include <iostream>
#include <cstdlib>

const int max_bits = 30;

void usage( int argc, char ** argv )
{
	std::cerr <<
	 		"usage: " << argv[0] << " <bits>\n"
			"Here <bits> is the number of bits used for generating the van der Corput sequence.\n"
			"Note: <bits> must be in the range [0.." << max_bits << "].\n"
		 	<< std::flush;
}

int main ( int argc, char ** argv )
{
	if ( argc != 2 ) { usage(argc,argv); return 1; }

	int bits = std::atoi(argv[1]);

	if ( bits < 0 or bits > max_bits ) { usage(argc,argv); return 2; }

	for ( size_t i = 0; i < 1<<bits; ++i )
	{
		size_t vandercorput = 0;
		size_t index = i;
		for ( int b = 0; b < bits; ++b )
		{
			vandercorput <<= 1;	
			vandercorput |=	( index & 1 ) ;
			index >>= 1;
		}
		std::cout
			<< /* i << ' ' << */
			vandercorput << std::endl;

	}
	return 0;
}

