#include <iostream>
#include <random>
#include <algorithm>
#include <array>
#include <iterator>

template <typename TContainer>
void generate(TContainer& container) {
    const int MIN = 10;
    const int MAX = 50;
    
    std::minstd_rand engine;
    std::uniform_int_distribution<int> dist(MIN, MAX);
    std::generate(container.begin(), container.end(), [&]() { return dist(engine); });
}

int main() {
    const int SIZE = 16;    
    std::array<int, SIZE> numbers;
    
    generate(numbers);
    
    std::copy(numbers.begin(), numbers.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
    
    std::reverse(numbers.begin(), numbers.begin() + SIZE / 2);
    std::reverse(numbers.begin() + SIZE / 2, numbers.end());
    
    std::copy(numbers.begin(), numbers.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << "\n";
}