#include <iostream>
#include <vector>

void generate( std::vector<int>& seq, std::size_t pos = 0 )
{
   if( pos == seq.size() ) // pos is beyond the last element; print the seq
   {
       for( int v : seq ) std::cout << v << ' ' ;
       std::cout << '\n' ;
   }
   else // generate sequence starting at pos
   {
       for( std::size_t i = 0 ; i <= pos ; ++i )
       {
           seq[pos] = i+1 ; // place 1,2,3 ... pos+1 at position pos
           generate( seq, pos+1 ) ; // and generate the rest of sequence
       }
   }
}

int main()
{
    const std::size_t N = 4 ;
    std::vector<int> seq(N) ;
    generate(seq) ;
}
