#include <iostream>
#include <vector>
#include <numeric>
int p( int k, const std::vector<int>& dims )
{
int ret = 1;
for( int i = dims.size()-1; i>k; --i )
{
ret *= dims[i];
}
return ret;
}
void printArray( const std::vector<int>& a, const std::vector<int>& dims )
{
for( int i=0; i<a.size(); ++i )
{
for( int j=0; j<dims.size(); ++j )
{
std::cout << "[" << (i / p(j,dims)) % dims[j] << "]";
}
std::cout << " = " << a[i] << std::endl;
}
std::cout << "---------\n";
}
int main() {
std::vector<int> v(24);
std::iota( v.begin(), v.end(), 0 );
std::vector<int> s1 = {24};
printArray( v, s1 );
std::vector<int> s2 = {4,6};
printArray( v, s2 );
std::vector<int> s3 = {2,3,4};
printArray( v, s3 );
std::vector<int> s4 = {3,2,2,2};
printArray( v, s4 );
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bnVtZXJpYz4KIAppbnQgcCggaW50IGssIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGRpbXMgKQp7CiAgICBpbnQgcmV0ID0gMTsKICAgIGZvciggaW50IGkgPSBkaW1zLnNpemUoKS0xOyBpPms7IC0taSApCiAgICB7CiAgICAgICAgcmV0ICo9IGRpbXNbaV07CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CiAKdm9pZCBwcmludEFycmF5KCBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBhLCBjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+JiBkaW1zICkKewogICAgZm9yKCBpbnQgaT0wOyBpPGEuc2l6ZSgpOyArK2kgKQogICAgewogICAgICAgIGZvciggaW50IGo9MDsgajxkaW1zLnNpemUoKTsgKytqICkKICAgICAgICB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiWyIgPDwgKGkgLyBwKGosZGltcykpICUgZGltc1tqXSA8PCAiXSI7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0ZDo6Y291dCA8PCAiID0gIiA8PCBhW2ldIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIAogICAgc3RkOjpjb3V0IDw8ICItLS0tLS0tLS1cbiI7Cn0KIAogCmludCBtYWluKCkgewogCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYoMjQpOwogICAgCiAgICBzdGQ6OmlvdGEoIHYuYmVnaW4oKSwgdi5lbmQoKSwgMCApOwogICAgCiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHMxID0gezI0fTsKICAgIHByaW50QXJyYXkoIHYsIHMxICk7CiAgICAKICAgIHN0ZDo6dmVjdG9yPGludD4gczIgPSB7NCw2fTsKICAgIHByaW50QXJyYXkoIHYsIHMyICk7CiAgICAKICAgIHN0ZDo6dmVjdG9yPGludD4gczMgPSB7MiwzLDR9OwogICAgcHJpbnRBcnJheSggdiwgczMgKTsgICAgCgoJc3RkOjp2ZWN0b3I8aW50PiBzNCA9IHszLDIsMiwyfTsKICAgIHByaW50QXJyYXkoIHYsIHM0ICk7IAoKICAgIHJldHVybiAwOwp9