#include <array>
#include <cstddef>
template < typename T>
struct identity
{
using type = T;
} ;
template < typename T>
using eval = typename T:: type ;
template < typename T>
struct make_std_array
: identity< T> { } ;
template < typename T, std:: size_t N>
struct make_std_array< T[ N] >
: identity< std:: array < eval< make_std_array< T>> ,N>> { } ;
template < typename T>
using std_array = eval< make_std_array< T>> ;
#include <type_traits>
static_assert( std:: is_same < std_array< int [ 3 ] [ 4 ] > , std:: array < std:: array < int , 4 > , 3 >> :: value , "" ) ;
I2luY2x1ZGUgPGFycmF5PgojaW5jbHVkZSA8Y3N0ZGRlZj4KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgaWRlbnRpdHkKewogICAgdXNpbmcgdHlwZSA9IFQ7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgZXZhbCA9IHR5cGVuYW1lIFQ6OnR5cGU7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IG1ha2Vfc3RkX2FycmF5CiAgICA6IGlkZW50aXR5PFQ+IHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CnN0cnVjdCBtYWtlX3N0ZF9hcnJheTxUW05dPgogICAgOiBpZGVudGl0eTxzdGQ6OmFycmF5PGV2YWw8bWFrZV9zdGRfYXJyYXk8VD4+LE4+PiB7fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBzdGRfYXJyYXkgPSBldmFsPG1ha2Vfc3RkX2FycmF5PFQ+PjsKCiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4Kc3RhdGljX2Fzc2VydCggc3RkOjppc19zYW1lPHN0ZF9hcnJheTxpbnRbM11bNF0+LCBzdGQ6OmFycmF5PHN0ZDo6YXJyYXk8aW50LCA0PiwgMz4+Ojp2YWx1ZSwgIiIgKTs=