#include <iostream>
#include <vector>

template<typename T>
std::ostream &operator<<(std::ostream &os, const std::vector<T> &vec) {
    os << '[';
    for (auto i = std::begin(vec); i < std::end(vec) - 1; i++) {
        os << *i << ", ";
    }
    os << *(std::end(vec) - 1) << ']';
    return os;
}

int main() {
    std::vector<int> a {1, 2, 3};
    std::vector<std::vector<int>> b {{1, 2}, {3}};
    std::vector<double> c {1.1, 2.1, 3.1};
    std::cout << a << '\n';
    std::cout << b << '\n';
    std::cout << c << '\n';
}