class Solution {
public:
map<int,vector<char> >ans;
vector<string>answer;
vector<string> letterCombinations(string &digits) {
answer.clear();
if(digits.length()==0){
return answer;
}
char a='a'-1;
for(int i=2;i<=7;i++){
for(int j=1;j<=3;j++)
ans[i].push_back(++a);
}
ans[7].push_back(++a);
for(int i=8;i<=9;i++){
for(int j=1;j<=3;j++){
ans[i].push_back(++a);
}
}
ans[9].push_back(++a);
int len=digits.length();
dfs(0,len,digits,"");
return answer;
}
void dfs(int dep,int max_dep,string &s,string ans_str){
// cout<<dep<<" "<<max_dep<<" "<<s<<" "<<ans_str<<endl;
if(dep==max_dep){
answer.push_back(ans_str);
return;
}
// cout<<ans[1].size()<<endl;
// cout<<ans[s[dep]-'0'].size()<<endl;
for(int i=0;i<ans[s[dep]-'0'].size();i++){
dfs(dep+1,max_dep,s,ans_str+ans[s[dep]-'0'][i]);
}
}
};