#include <iostream>
#include <vector>
#include <list>

std::string buildString(const std::vector<int>& vec, const std::string& alphabet){
  std::string res(vec.size(), '-');
  for(int i=0; i<vec.size(); ++i){
    res[i] = alphabet[vec[i]];
  }
  return res;
}

int main(){

  const int outputLength = 4;
  const std::string alphabet("abc123");
  const int symCount = alphabet.length();

  std::vector<int> curCombination(outputLength, 0);
  std::list<std::string> combinations;


  int pos;
  do{
    for(int i=0; i<symCount; ++i){
      curCombination[0] = i;
      combinations.push_back(buildString(curCombination, alphabet));
    }
    pos=1;
    while(pos < outputLength){
     curCombination[pos]++;
     if(curCombination[pos]>=symCount){
       curCombination[pos] = 0;
       pos++;
     }else{
       break;
     }
    }  

  }while(pos < outputLength);
  
  /* output generated list */
  auto it  = combinations.begin();
  auto ite = combinations.end();
  for( ; it!=ite; ++it){
    std::cout << *it << std::endl;
  }
  
  return 0;
}