#include <iostream>

int length = 5;


//Print the bit array
void printBitArray(bool bitarray[]) {
	int i;
	
	for (i=0; i<length; i++) {
		std::cout << bitarray[i];
	}
}

//Increment by one bit
void increment(bool bitstring[]) {
	int index = length - 1;
	
	while (bitstring[index] == 1) {
		bitstring[index] = 0;
		index--;
	}
	
	bitstring[index] = 1;
}



int main (int argc, char * const argv[]) {
	int i,j;
	int maxint = 1;
	bool bitstring[length];
	bool ones[length];
	bool twos[length];
	
	//Initialize to zero bit-vector
	for (i=0; i<length; i++) {
		bitstring[i] = 0;
		maxint *= 2;
	}
	
	
	for (i=0; i<maxint; i++) {
		//Invert
		for (j=0; j<length; j++) {
			ones[j] = not bitstring[j];
			twos[j] = not bitstring[j];
		}
		
		increment(twos);
		
		//Output
		std::cout << i;
		std::cout << "	: ";
		printBitArray(bitstring);
		
		if (i < maxint / 2) {
			std::cout << "  ";
			printBitArray(ones);
		}
		else {
			std::cout << "			";
		}
		
		if (i <= maxint / 2) {
			std::cout << "  ";
			printBitArray(twos);
		}
		
		std::cout << "\n";
		
		increment(bitstring);
	}
	
	return 0;
}



