Hash table || Simple BFS || Java Solution
Code\n\nclass Solution {\n    public String rotateRight(String s, int b) {\n    int len = s.length();\n    if (len <= 1) {\n        return s;\n    }\n    int k 
# Code\n```\nclass Solution {\n    public String rotateRight(String s, int b) {\n    int len = s.length();\n    if (len <= 1) {\n        return s;\n    }\n    int k = b % len;\n    if (k == 0) {\n        return s;\n    }\n    String suffix = s.substring(len - k);\n    String prefix = s.substring(0, len - k);\n    return suffix + prefix;\n}\n    public String addOddIndices(String s, int a) {\n    StringBuilder sb = new StringBuilder();\n    for (int i = 0; i < s.length(); i++) {\n        char c = s.charAt(i);\n        if (i % 2 == 1) {\n            int digit = (c - \'0\' + a) % 10;\n            c = (char) (\'0\' + digit);\n        }\n        sb.append(c);\n    }\n    return sb.toString();\n}\n\n    public String findLexSmallestString(String s, int a, int b) {\n        int n = s.length();\n        Queue<String> q = new LinkedList<>();\n        TreeSet<String> set = new TreeSet<>();\n        q.add(s);\n        set.add(s);\n        while(!q.isEmpty()){\n           String t = q.peek();\n           q.remove();\n           String t1 = rotateRight(t,b);\n           String t2 = addOddIndices(t,a);\n            if(!set.contains(t1)){\n               q.add(t1);\n               set.add(t1);\n           }\n            if(!set.contains(t2)){\n               q.add(t2);\n               set.add(t2);\n           }\n        }\n        return set.first();\n    }\n}\n```
['Hash Table', 'String', 'Breadth-First Search', 'Java']