Solution
C++ []\nclass CombinationIterator {\nprivate:\n    vector<string> comb;\n    void solve(string& characters, string& temp, int i, int k){\n        if(i == charac
```C++ []\nclass CombinationIterator {\nprivate:\n    vector<string> comb;\n    void solve(string& characters, string& temp, int i, int k){\n        if(i == characters.length()){\n            if(k == temp.length()) comb.push_back(temp);\n            return;\n        }\n        temp.push_back(characters[i]);\n        solve(characters, temp, i+1, k);\n        temp.pop_back();\n        solve(characters, temp, i+1, k);\n    }\npublic:\n    int i = 0;\n    CombinationIterator(string characters, int combinationLength) {\n        string temp;\n        solve(characters, temp, 0, combinationLength);\n    }\n    string next() {\n        return comb[i++];\n    }\n    bool hasNext() {\n        if(i < comb.size()) return true;\n        return false;\n    }\n};\n```\n\n```Python3 []\nclass CombinationIterator:\n\n    def __init__(self, char: str, comblen: int):\n        self.allCombinations = list(combinations(char, comblen))\n        self.count = 0\n\n    def next(self) -> str:\n        self.count += 1\n        return "".join(self.allCombinations[self.count-1])\n        \n    def hasNext(self) -> bool:\n        return self.count < len(self.allCombinations)\n```\n\n```Java []\nclass CombinationIterator {\n    private int[] currArr;\n    private int[] maxArr;\n    private String str;\n    private boolean lastStringSeen;\n    public CombinationIterator(String characters, int combinationLength) {\n        currArr = new int[combinationLength];\n        maxArr= new int[combinationLength];\n        str = characters;\n        lastStringSeen = false;\n        for(int i = 0; i < currArr.length; i++)\n            currArr[i] = i;\n        maxArr[maxArr.length-1] = characters.length()-1;\n        for(int j = maxArr.length-2; j >= 0; j--){\n            maxArr[j] = maxArr[j+1]-1;\n        }\n    }\n    public String next() {\n        StringBuilder temp = new StringBuilder();\n        for(int i = 0; i < currArr.length; i++)\n            temp.append(str.charAt(currArr[i]));\n        if(currArr[currArr.length-1] == maxArr[maxArr.length-1]){\n            int j = currArr.length-1;\n            for(; j >= 0; j--){\n                if(currArr[j] < maxArr[j])\n                    break;\n            }\n            if(j >= 0){\n                currArr[j] += 1;\n                for(int k = j+1; k < currArr.length; k++)\n                    currArr[k] = currArr[k-1] + 1;\n            }\n            else{\n                lastStringSeen = true;\n            }\n            currArr[currArr.length-1] -= 1;\n        }\n        currArr[currArr.length-1] += 1;\n        return temp.toString();\n    }\n    public boolean hasNext() {\n        return !lastStringSeen;\n    }\n}\n```
['C++', 'Java', 'Python3']