#include <iostream>
#include <vector>
#include <string>
using namespace std;
void getCombination(vector<string> &combinations, string current, const string &A, int idx, const vector<string> &keyset){
if(idx >= A.size()) {
combinations.push_back(current);
return;
}
int key = (A[idx] - '0');
int len = keyset[key].length();
for( int i = 0; i < len; i++ ){
current.push_back(keyset[key][i]); //pick at once one char corresp. to that keypress
getCombination(combinations, current, A, idx+1, keyset);
current.pop_back();
}
}
vector<string> letterCombinations(string A) {
vector<string> combinations;
vector<string> keyset{"0", "1", "2abc", "3def", "4ghi", "5jkl", "6mno", "7pqrs", "8tuv", "9wxyz"};
getCombination(combinations, std::string({}), A, 0, keyset);
return combinations;
}
int main() {
vector<string> combinations = letterCombinations("23");
for(string word : combinations){
cout << word << ", ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIGdldENvbWJpbmF0aW9uKHZlY3RvcjxzdHJpbmc+ICZjb21iaW5hdGlvbnMsIHN0cmluZyBjdXJyZW50LCBjb25zdCBzdHJpbmcgJkEsIGludCBpZHgsIGNvbnN0IHZlY3RvcjxzdHJpbmc+ICZrZXlzZXQpewogICAgICBpZihpZHggPj0gQS5zaXplKCkpIHsKICAgICAgICAgIGNvbWJpbmF0aW9ucy5wdXNoX2JhY2soY3VycmVudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaW50IGtleSA9IChBW2lkeF0gLSAnMCcpOwogICAgICBpbnQgbGVuID0ga2V5c2V0W2tleV0ubGVuZ3RoKCk7CgogICAgICBmb3IoIGludCBpID0gMDsgaSA8IGxlbjsgaSsrICl7IAogICAgICAgICAgY3VycmVudC5wdXNoX2JhY2soa2V5c2V0W2tleV1baV0pOyAgLy9waWNrIGF0IG9uY2Ugb25lIGNoYXIgY29ycmVzcC4gdG8gdGhhdCBrZXlwcmVzcwogICAgICAgICAgZ2V0Q29tYmluYXRpb24oY29tYmluYXRpb25zLCBjdXJyZW50LCBBLCBpZHgrMSwga2V5c2V0KTsKICAgICAgICAgIGN1cnJlbnQucG9wX2JhY2soKTsKICAgICAgfQp9Cgp2ZWN0b3I8c3RyaW5nPiBsZXR0ZXJDb21iaW5hdGlvbnMoc3RyaW5nIEEpIHsKICAgIHZlY3RvcjxzdHJpbmc+IGNvbWJpbmF0aW9uczsKICAgIHZlY3RvcjxzdHJpbmc+IGtleXNldHsiMCIsICIxIiwgIjJhYmMiLCAiM2RlZiIsICI0Z2hpIiwgIjVqa2wiLCAiNm1ubyIsICI3cHFycyIsICI4dHV2IiwgIjl3eHl6In07CiAgICBnZXRDb21iaW5hdGlvbihjb21iaW5hdGlvbnMsIHN0ZDo6c3RyaW5nKHt9KSwgQSwgMCwga2V5c2V0KTsgIAogICAgcmV0dXJuIGNvbWJpbmF0aW9uczsKfQoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8c3RyaW5nPiBjb21iaW5hdGlvbnMgPSBsZXR0ZXJDb21iaW5hdGlvbnMoIjIzIik7Cglmb3Ioc3RyaW5nIHdvcmQgOiBjb21iaW5hdGlvbnMpewoJICAgIGNvdXQgPDwgd29yZCA8PCAiLCAiOwoJfQoJcmV0dXJuIDA7Cn0=
23, 2d, 2e, 2f, a3, ad, ae, af, b3, bd, be, bf, c3, cd, ce, cf,