#include <iostream>
#include <cmath>
#include <vector>
template <typename typeVec1, typename typeVec2>
void customPerms(typeVec1 a, typeVec2 b) {
int r = a.size(), n = b.size();
int r1 = r - 1, n1 = n - 1;
std::vector<int> z(r, 0);
int numRows = (int) std::pow(n, r);
for (int i = 0; i < numRows; ++i) {
for (int j = 0; j < r; ++j)
std::cout << a[j] << b[z[j]];
std::cout << std::endl;
for (int k = r1; k >= 0; --k) {
if (z[k] != n1) {
++z[k];
break;
} else {
z[k] = 0;
}
}
}
}
int main() {
std::cout << "Example 1 : " << std::endl;
std::vector<std::string> a1 = {"a", "b", "c"};
std::vector<int> b1 = {1, 2};
customPerms(a1, b1);
std::cout << "\nExample 2 : " << std::endl;
std::vector<char> a2 = {'a', 'b'};
std::vector<int> b2 = {1, 2, 3};
customPerms(a2, b2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgdHlwZVZlYzEsIHR5cGVuYW1lIHR5cGVWZWMyPgp2b2lkIGN1c3RvbVBlcm1zKHR5cGVWZWMxIGEsIHR5cGVWZWMyIGIpIHsKCiAgICBpbnQgciA9IGEuc2l6ZSgpLCBuID0gYi5zaXplKCk7CiAgICBpbnQgcjEgPSByIC0gMSwgbjEgPSBuIC0gMTsKICAgIHN0ZDo6dmVjdG9yPGludD4geihyLCAwKTsKICAgIGludCBudW1Sb3dzID0gKGludCkgc3RkOjpwb3cobiwgcik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Sb3dzOyArK2kpIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHI7ICsraikKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGFbal0gPDwgYlt6W2pdXTsKICAgICAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgICBmb3IgKGludCBrID0gcjE7IGsgPj0gMDsgLS1rKSB7CiAgICAgICAgICAgIGlmICh6W2tdICE9IG4xKSB7CiAgICAgICAgICAgICAgICArK3pba107CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHpba10gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dCA8PCAiRXhhbXBsZSAxIDogIiA8PCBzdGQ6OmVuZGw7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYTEgPSB7ImEiLCAiYiIsICJjIn07CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGIxID0gezEsIDJ9OwogICAgY3VzdG9tUGVybXMoYTEsIGIxKTsKICAgIAogICAgc3RkOjpjb3V0IDw8ICJcbkV4YW1wbGUgMiA6ICIgPDwgc3RkOjplbmRsOwogICAgc3RkOjp2ZWN0b3I8Y2hhcj4gYTIgPSB7J2EnLCAnYid9OwogICAgc3RkOjp2ZWN0b3I8aW50PiBiMiA9IHsxLCAyLCAzfTsKICAgIGN1c3RvbVBlcm1zKGEyLCBiMik7CiAgICByZXR1cm4gMDsKfQ==