#pragma once

#include <vector>

template <class T>
std::vector<T> create_vector(T value, size_t size) {
    return std::vector<T>(size, value);
}

template <class T, class... Args, class V = std::vector<
    decltype(create_vector<T>(std::declval<T>(), std::declval<Args>()...))
>>
V create_vector(T value, size_t size, Args... sizes) {
    return V(size, create_vector<T>(value, sizes...));
}

template <class T, class... Args, class V =
    decltype(create_vector<T>(std::declval<T>(), std::declval<Args>()...))
>
V initialize_vector(T value, Args... sizes) {
    return create_vector<T>(value, sizes...);
}