#include <string>

class Counter
{
  char max_digit;
  std::string alphabet;
  std::string current_number;
public:
  Counter(char num_digits, std::string const& alphabet) : 
    max_digit(num_digits - 1), alphabet(alphabet), current_number(1, 0) { }
  std::string get_next_number()
  {
    std::size_t size = current_number.size();
    std::string result(size, ' ');
    for (std::size_t pos = 0; pos != size; ++pos)
      result[size - 1 - pos] = alphabet[current_number[pos]];    

    for (std::size_t pos = 0;;++pos)
      {
        if (pos == size)
          {
            current_number.push_back(1);
            break;
          }
        if (current_number[pos] == max_digit)
          {
            current_number[pos] = 0;
          }
        else
          {
            ++current_number[pos];
            break;
          }
      }

    return result;
  }
};

#include <iostream>
int main()
{
  Counter counter(16, "0123456789ABCDEF");
  for (int i = 0; i < 1024; ++i)
    std::cout << counter.get_next_number() << '\n';
}
