C# Straightforward BFS Solution
\npublic class Solution\n    {\n\n        private string Add(ref string s, int a)\n        {\n            StringBuilder sb = new StringBuilder(s);\n            
```\npublic class Solution\n    {\n\n        private string Add(ref string s, int a)\n        {\n            StringBuilder sb = new StringBuilder(s);\n            for (int i = 1; i < s.Length; i += 2)\n            {\n                var curr = sb[i] - \'0\';\n                curr += a;\n                curr %= 10;\n                sb[i] = (char) (\'0\' + curr);\n\n            }\n\n            return sb.ToString();\n        }\n\n\n\n        public string FindLexSmallestString(string s, int a, int b)\n        {\n            string res = s;\n            ISet<string> visited = new HashSet<string>();\n            visited.Add(s);\n            Queue<string> bfs = new Queue<string>();\n            bfs.Enqueue(s);\n\n            while (bfs.Count != 0)\n            {\n                var curr = bfs.Dequeue();\n                if (string.CompareOrdinal(curr, res) < 0)\n                {\n                    res = curr;\n                }\n                var cand1 = curr.Substring(s.Length - b, b) + curr.Substring(0, s.Length - b);\n                var cand2 = Add(ref curr, a);\n\n                if (visited.Add(cand1))\n                {\n                    bfs.Enqueue(cand1);\n                }\n\n                if (visited.Add(cand2))\n                {\n                    bfs.Enqueue(cand2);\n                }\n            }\n\n\n            return res;\n        }\n    }\n\n```
['Breadth-First Search']