#include <cstdlib>
#include <ctime>
#include <random>
#include <iterator>
#include <iostream>
 
int random_int( std::mt19937& rng, int low, int high )
{ return std::uniform_int_distribution<int>( low, high )(rng) ; }
 
int main()
{
    // initialize random number generator with warm-up sequence
    // somewhat elaborate because: 'nearly perfect pseudo random numbers'
    std::srand( std::time(nullptr) ) ;
    std::uint32_t r[ std::mt19937::state_size ] ;
    for( std::uint32_t& n : r ) n = std::rand() ;
    std::seed_seq sseq( std::begin(r), std::end(r) ) ;
    std::mt19937 gen(sseq) ;
 
    // generate and print out 20 random numbers in [0,9]
    for( int i = 0 ; i < 20 ; ++i ) std::cout << random_int( gen, 0, 9 ) << ' ' ;
    std::cout << '\n' ;
 
    // generate and print out 10 random numbers in [55,72]
    for( int i = 0 ; i < 10 ; ++i ) std::cout << random_int( gen, 55, 72 ) << ' ' ;
    std::cout << '\n' ;
}
