#include #include #include #include using namespace std; template class multiarray { public: typedef multiarray recurtype; multiarray() { } multiarray(initializer_list l) { copy(l.begin(),l.end(),x.begin()); } template T &operator()(I &&i1, Is &&...is) { return x[i1](is...); } template T operator()(I &&i1, Is &&...is) const { return x[i1](is...); } recurtype &operator[](size_t i) { return x[i]; } recurtype operator[](size_t i) const { return x[i]; } private: array x; }; template class multiarray { public: typedef T recurtype; multiarray() { } multiarray(initializer_list l) { copy(l.begin(),l.end(),x.begin()); } template T &operator()(I &&i1) { return x[i1]; } template T operator()(I &&i1) const { return x[i1]; } recurtype &operator[](size_t i) { return x[i]; } recurtype operator[](size_t i) const { return x[i]; } private: array x; }; void printis() { } template void printis(T i1, Ts ...is) { printis(is...); cout << '[' << i1 << ']'; } template void maprint(const multiarray &ma,Is... is) { for(size_t i=0;i void maprint(const multiarray &ma, Is... is) { for(size_t i=0;i