#include <iostream>
using namespace std;

#include <random>
#include <memory>

class BaseRandom
{
public:
	virtual int next_int() = 0;
};

template <class T>
class ConcreteRandom : public BaseRandom
{
public:
	virtual int next_int() {
		return prng();
	}
	
	T prng;
};

int main() {
	auto random = std::make_unique<ConcreteRandom<std::mt19937>>();
	random->next_int();
	return 0;
}