#include <chrono>
#include <iostream>
#include <queue>
#include <random>
#include <thread>

int main()
{
	using clock = std::chrono::steady_clock;
	using time_point = clock::time_point;
	using time_unit = std::chrono::milliseconds;

	std::default_random_engine engine;
	std::uniform_int_distribution<unsigned> dist{0, 15};
	std::priority_queue<time_point, std::vector<time_point>, std::greater<time_point>> queue;

	std::cout << "input:\n";
	auto start = clock::now();
	for (unsigned i = 0; i != 10; ++i)
	{
		auto num = dist(engine);
		std::cout << num << "\n";
		auto time = start + time_unit{num};
		queue.push(time);
	}

	std::cout << "output:\n";
	while (!queue.empty())
	{
		auto next = queue.top();
		std::this_thread::sleep_until(next);
		auto ms = std::chrono::duration_cast<time_unit>(next - start);
		std::cout << ms.count() << "\n";
		queue.pop();
	}
}