#include <iostream>
#include <vector>
#include <iomanip>

void print( const std::vector<bool>& seq )
{
    for( bool b : seq ) std::cout << std::setw(5) << b << "; " ;
    std::cout << '\n' ;
}

void generate( std::vector<bool>& seq, std::vector<bool>::iterator from )
{
    if( from == seq.end() ) print(seq) ;
    else
    {
        *from = false ;
        generate( seq, from+1 ) ;
        *from = true ;
        generate( seq, from+1 ) ;
    }
}

void generate( std::size_t n )
{
   std::vector<bool> seq(n) ;
   generate( seq, seq.begin() ) ;
}

int main()
{
    std::cout << std::boolalpha ;
    generate(5) ; // 2^5 sequences
}
