const auto io_sync_off = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return nullptr;
}
();


class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param digits string字符串
     * @return string字符串vector
     */
    vector<string> letterCombinations(string digits) {
        int n = digits.size();
        if (!n) return {};
        // write code here
        unordered_map<char, string>mp {
            {'2', "abc"},
            {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}
        };
        string buf;
        dfs(buf, digits, 0, mp);
        return ans;
    }

    vector<string>   ans;

    void dfs(string& buf, string& s, int i, unordered_map<char, string> mp) {
        if (i == s.size()) {
            ans.push_back(buf);
            return ;
        }
        auto& str = mp[s[i]];
        for (char f : str) {
            buf.push_back(f);
            dfs(buf, s, i + 1, mp);
            buf.pop_back();
        }
    }

};

#ifdef debug


int main() {
    cout << __FILE__ << endl;
    Solution k;

    println(k.letterCombinations("34"));
    return 0;
}


#endif