#include <iostream>
#include <vector>
bool increase(const std::vector<std::vector<int>>& v, std::vector<std::size_t>& it)
{
for (std::size_t i = 0, size = it.size(); i != size; ++i) {
const std::size_t index = size - 1 - i;
++it[index];
if (it[index] >= v[index].size()) {
it[index] = 0;
} else {
return true;
}
}
return false;
}
void do_job(const std::vector<std::vector<int>>& v,
const std::vector<std::size_t>& it)
{
for (std::size_t i = 0; i != it.size(); ++i) {
std::cout << v[i][it[i]] << " ";
}
std::cout << std::endl;
}
void iterate(const std::vector<std::vector<int>>& v)
{
std::vector<std::size_t> it(v.size(), 0u);
do {
do_job(v, it);
} while (increase(v, it));
}
int main(int argc, char *argv[])
{
std::vector<std::vector<int>> v = {
{1,2,3},
{4,5},
{6,7,8,9},
{10,11}
};
iterate(v);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgogCmJvb2wgaW5jcmVhc2UoY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4mIHYsIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiYgaXQpCnsKICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDAsIHNpemUgPSBpdC5zaXplKCk7IGkgIT0gc2l6ZTsgKytpKSB7CiAgICAgICAgY29uc3Qgc3RkOjpzaXplX3QgaW5kZXggPSBzaXplIC0gMSAtIGk7CiAgICAgICAgKytpdFtpbmRleF07CiAgICAgICAgaWYgKGl0W2luZGV4XSA+PSB2W2luZGV4XS5zaXplKCkpIHsKICAgICAgICAgICAgaXRbaW5kZXhdID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KIAp2b2lkIGRvX2pvYihjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+PiYgdiwKICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+JiBpdCkKewogICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBpdC5zaXplKCk7ICsraSkgewogICAgICAgIHN0ZDo6Y291dCA8PCB2W2ldW2l0W2ldXSA8PCAiICI7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9CiAKdm9pZCBpdGVyYXRlKGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPGludD4+JiB2KQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gaXQodi5zaXplKCksIDB1KTsKIAogICAgZG8gewogICAgICAgIGRvX2pvYih2LCBpdCk7CiAgICB9IHdoaWxlIChpbmNyZWFzZSh2LCBpdCkpOwp9CiAKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4gdiA9IHsKICAgIAl7MSwyLDN9LAogICAgCXs0LDV9LAogICAgCXs2LDcsOCw5fSwKICAgIAl7MTAsMTF9CiAgIAl9OwogICAgaXRlcmF0ZSh2KTsKfQ==