#include <random>
#include <chrono>
#include <iostream>
#include <string>
#include <fstream>
class imgurRandom
{
public:

char upperCase()
{
	auto timeSeed = std::chrono::system_clock::now().time_since_epoch().count();
	std::minstd_rand0 generator(timeSeed);
	std::uniform_int_distribution<int> distribution(minRangeOfAsciiUppercaseLetter, maxRangeOfAsciiUppercaseLetter);
	auto getRandom = [&]() { return distribution(generator); };

	return getRandom();
}
char lowerCase()
{
	auto timeSeed = std::chrono::system_clock::now().time_since_epoch().count();
	std::minstd_rand0 generator(timeSeed);
	std::uniform_int_distribution <int> distribution(minRangeOfAsciiLowercaseLetter, maxRangeOfAsciiLowercaseletter);
	auto getRandom = [&]() { return distribution(generator); };

	return getRandom();
}

unsigned short int getTrueOrFalse()
{
	auto timeSeed = std::chrono::system_clock::now().time_since_epoch().count();
	std::minstd_rand0 generator(timeSeed);
	std::uniform_int_distribution<int> distribution(0, 1);
	auto getRandom = [&]() { return distribution(generator); };

	return getRandom();
}


private:
	const unsigned short int minRangeOfAsciiUppercaseLetter = 65;
	const unsigned short int maxRangeOfAsciiUppercaseLetter = 90;

	const unsigned short int minRangeOfAsciiLowercaseLetter = 97;
	const unsigned short int maxRangeOfAsciiLowercaseletter = 122;

	const unsigned short int minDigitRange = 0;
	const unsigned short int maxDigitRange = 9;
};
int main()
{
	imgurRandom random;
	char letter;
	unsigned short int asciiCode = 0;
	std::string imageName = "";
//	std::ofstream fileToStoreImageNames;
	//fileToStoreImageNames.open("imgur_names.txt", std::ios::app);


//	if (!fileToStoreImageNames.is_open())
//		return -1;


	for (auto i = 0; i < 6; i++)
	{ /* if getTrueOrFalse()==0 return upperCase() if not return lowerCase() */
		asciiCode = random.getTrueOrFalse() == 0 ? random.upperCase() : random.lowerCase();
		letter = static_cast <char>(asciiCode);
		if (imageName.size() > 0)
			imageName += letter;
		else
			imageName = letter;
	}
//	fileToStoreImageNames << imageName << std::endl;
	std::cout << imageName << std::endl;


	return 0;
}