#include <array>
#include <iostream>
#include <iterator>
template <typename T, size_t N>
struct Array
{
std::array<T,N> data;
//T data[N];
auto begin() const { return std::begin(data); }
auto end() const { return std::end(data); }
};
template <typename T, size_t N>
std::ostream& operator << (std::ostream& output, const Array<T, N>& array)
{
output << "[";
for (auto&& element : array)
output << " " << element;
return output << " ]";
}
int main()
{
Array<Array<int, 2>, 2> m { 0, 1, 2, 3 };
std::cout << m << std::endl;
}
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4Kc3RydWN0IEFycmF5CnsKICAgc3RkOjphcnJheTxULE4+IGRhdGE7CiAgIC8vVCBkYXRhW05dOwoKICAgYXV0byBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6YmVnaW4oZGF0YSk7IH0KICAgYXV0byBlbmQoKSBjb25zdCB7IHJldHVybiBzdGQ6OmVuZChkYXRhKTsgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG91dHB1dCwgY29uc3QgQXJyYXk8VCwgTj4mIGFycmF5KQp7CiAgIG91dHB1dCA8PCAiWyI7CiAgIGZvciAoYXV0byYmIGVsZW1lbnQgOiBhcnJheSkKICAgICAgb3V0cHV0IDw8ICIgIiA8PCBlbGVtZW50OwoKICAgcmV0dXJuIG91dHB1dCA8PCAiIF0iOwp9CgppbnQgbWFpbigpCnsKICAgQXJyYXk8QXJyYXk8aW50LCAyPiwgMj4gbSB7IDAsIDEsIDIsIDMgfTsKICAgc3RkOjpjb3V0IDw8IG0gPDwgc3RkOjplbmRsOwp9Cgo=