Easy C# Solution
\n    public class CombinationIterator\n    {\n        private readonly StringBuilder _sb;\n        private readonly Stack<int> _indices;\n        private reado
```\n    public class CombinationIterator\n    {\n        private readonly StringBuilder _sb;\n        private readonly Stack<int> _indices;\n        private readonly int _combinationLength;\n        private readonly string _characters;\n\n        public CombinationIterator(string characters, int combinationLength)\n        {\n            _sb = new StringBuilder(combinationLength);\n            _indices = new Stack<int>();\n            _combinationLength = combinationLength;\n            _characters = characters;\n\n            if (_combinationLength > characters.Length)\n            {\n                return;\n            }\n\n            _sb.Append(\'0\', combinationLength);\n            for (int i = 0; i < combinationLength; i++)\n            {\n                _sb[i] = characters[i];\n                _indices.Push(i);\n            }\n        }\n\n        public string Next()\n        {\n            var res = _sb.ToString();\n            int inc = 1;\n\n            while (true)\n            {\n                if (_indices.Count == 0)\n                {\n                    break;\n                }\n\n                var top = _indices.Pop();\n\n                if (top + inc < _characters.Length)\n                {\n                    _indices.Push(top + 1);\n                    _sb[_indices.Count - 1] = _characters[_indices.Peek()];\n                    break;\n                }\n\n                inc++;\n            }\n\n            if (_indices.Count != 0)\n            {\n                while (_indices.Count != _combinationLength)\n                {\n                    _indices.Push(_indices.Peek() + 1);\n                    _sb[_indices.Count - 1] = _characters[_indices.Peek()];\n                }\n            }\n\n\n            return res;\n        }\n\n        public bool HasNext() => _indices.Count != 0;\n    }\n```
[]