#include <iostream>
#include <vector>
#include <valarray>
#include <set>
#include <map>
template <typename F, typename S>
std::ostream &operator <<(std::ostream &o, const std::pair<F, S> &pair)
{
return o << pair.first << ':' << pair.second;
}
template <template <typename ...> class CONTAINER, typename ... ARGS>
std::ostream &operator <<(std::ostream &o, const CONTAINER<ARGS ...> &container)
{
o << '[';
for (const auto &item : container)
{
o << item << ' ';
}
o << ']';
return o;
}
template <typename T>
void printContainer(const T &value)
{
std::cout << value;
}
template <template <typename ...> class CONTAINER, typename ... ARGS>
void printContainer(const CONTAINER<ARGS ...> &container)
{
std::cout << '[';
for (const auto &item : container)
{
printContainer(item);
std::cout << ' ';
}
std::cout << ']';
}
std::vector<int> vi { 1, 2, 3, 4, 5 };
std::vector<std::vector<int>> vvi { vi, vi, vi };
std::vector<std::vector<std::vector<int>>> vvvi { vvi, vvi, vvi };
std::valarray<int> vai { 1, 2, 3, 4, 5 };
std::valarray<std::valarray<int>> vavai { vai, vai, vai };
std::valarray<std::valarray<std::valarray<int>>> vavavai { vavai, vavai, vavai };
std::set<int> si { 1, 2, 3, 4, 5 };
std::set<std::set<int>> ssi { si, {6, 7}, {8, 9} };
std::set<std::set<std::set<int>>> sssi { ssi, {{10, 11}}, {{12, 14}} };
std::map<float, std::vector<int>> mfvi {{3.14f, {1, 2, 3}}, {6.28f, {4, 5, 6}}};
int main()
{
std::cout << vi << '\n'
<< vvi << '\n'
<< vvvi << '\n';
std::cout << vai << '\n'
<< vavai << '\n'
<< vavavai << '\n';
std::cout << si << '\n'
<< ssi << '\n'
<< sssi << '\n';
std::cout << mfvi << '\n';
printContainer(std::string{"Hello world!"});
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dmFsYXJyYXk+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDxtYXA+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUgUz4Kc3RkOjpvc3RyZWFtICZvcGVyYXRvciA8PChzdGQ6Om9zdHJlYW0gJm8sIGNvbnN0IHN0ZDo6cGFpcjxGLCBTPiAmcGFpcikKewoJcmV0dXJuIG8gPDwgcGFpci5maXJzdCA8PCAnOicgPDwgcGFpci5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uPiBjbGFzcyBDT05UQUlORVIsIHR5cGVuYW1lIC4uLiBBUkdTPgpzdGQ6Om9zdHJlYW0gJm9wZXJhdG9yIDw8KHN0ZDo6b3N0cmVhbSAmbywgY29uc3QgQ09OVEFJTkVSPEFSR1MgLi4uPiAmY29udGFpbmVyKQp7CglvIDw8ICdbJzsKCWZvciAoY29uc3QgYXV0byAmaXRlbSA6IGNvbnRhaW5lcikKCXsKCQlvIDw8IGl0ZW0gPDwgJyAnOwoJfQoJbyA8PCAnXSc7CgoJcmV0dXJuIG87Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIHByaW50Q29udGFpbmVyKGNvbnN0IFQgJnZhbHVlKQp7CglzdGQ6OmNvdXQgPDwgdmFsdWU7Cn0KCnRlbXBsYXRlIDx0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uPiBjbGFzcyBDT05UQUlORVIsIHR5cGVuYW1lIC4uLiBBUkdTPgp2b2lkIHByaW50Q29udGFpbmVyKGNvbnN0IENPTlRBSU5FUjxBUkdTIC4uLj4gJmNvbnRhaW5lcikKewoJc3RkOjpjb3V0IDw8ICdbJzsKCWZvciAoY29uc3QgYXV0byAmaXRlbSA6IGNvbnRhaW5lcikKCXsKCQlwcmludENvbnRhaW5lcihpdGVtKTsKCQlzdGQ6OmNvdXQgPDwgJyAnOwoJfQoJc3RkOjpjb3V0IDw8ICddJzsKfQoKc3RkOjp2ZWN0b3I8aW50PiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpIHsgMSwgMiwgMywgNCwgNSB9OwpzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+PiAgICAgICAgICAgICAgdnZpIHsgdmksIHZpLCB2aSB9OwpzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+Pj4gdnZ2aSB7IHZ2aSwgdnZpLCB2dmkgfTsKCnN0ZDo6dmFsYXJyYXk8aW50PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWkgeyAxLCAyLCAzLCA0LCA1IH07CnN0ZDo6dmFsYXJyYXk8c3RkOjp2YWxhcnJheTxpbnQ+PiAgICAgICAgICAgICAgICB2YXZhaSB7IHZhaSwgdmFpLCB2YWkgfTsKc3RkOjp2YWxhcnJheTxzdGQ6OnZhbGFycmF5PHN0ZDo6dmFsYXJyYXk8aW50Pj4+IHZhdmF2YWkgeyB2YXZhaSwgdmF2YWksIHZhdmFpIH07CgpzdGQ6OnNldDxpbnQ+ICAgICAgICAgICAgICAgICAgICAgc2kgeyAxLCAyLCAzLCA0LCA1IH07CnN0ZDo6c2V0PHN0ZDo6c2V0PGludD4+ICAgICAgICAgICBzc2kgeyBzaSwgezYsIDd9LCB7OCwgOX0gfTsKc3RkOjpzZXQ8c3RkOjpzZXQ8c3RkOjpzZXQ8aW50Pj4+IHNzc2kgeyBzc2ksIHt7MTAsIDExfX0sIHt7MTIsIDE0fX0gfTsKCnN0ZDo6bWFwPGZsb2F0LCBzdGQ6OnZlY3RvcjxpbnQ+PiBtZnZpIHt7My4xNGYsIHsxLCAyLCAzfX0sIHs2LjI4ZiwgezQsIDUsIDZ9fX07CgppbnQgbWFpbigpCnsKCXN0ZDo6Y291dCA8PCB2aSA8PCAnXG4nCgkJCSAgPDwgdnZpIDw8ICdcbicKCQkJICA8PCB2dnZpICA8PCAnXG4nOwoKCXN0ZDo6Y291dCA8PCB2YWkgPDwgJ1xuJwoJCQkgIDw8IHZhdmFpIDw8ICdcbicKCQkJICA8PCB2YXZhdmFpICA8PCAnXG4nOwoKCXN0ZDo6Y291dCA8PCBzaSA8PCAnXG4nCgkJCSAgPDwgc3NpIDw8ICdcbicKCQkJICA8PCBzc3NpICA8PCAnXG4nOwoKCXN0ZDo6Y291dCA8PCBtZnZpIDw8ICdcbic7CgoJcHJpbnRDb250YWluZXIoc3RkOjpzdHJpbmd7IkhlbGxvIHdvcmxkISJ9KTsKCglyZXR1cm4gMDsKfQ==