public class Solution {
    static HashMap<Integer, String> map = new HashMap<Integer, String>();
    static {
        map.put(0,"0");
        map.put(1,"1");
        map.put(2,"2");
        map.put(3,"3");
        map.put(4,"4");
        map.put(5,"5");
        map.put(6,"6");
        map.put(7,"7");
        map.put(8,"8");
        map.put(9,"9");
        map.put(10,"A");
        map.put(11,"B");
        map.put(12,"C");
        map.put(13,"D");
        map.put(14,"E");
        map.put(15,"F");
        map.put(16,"G");
        map.put(17,"H");
        map.put(18,"I");
        map.put(19,"J");
        map.put(20,"K");
        map.put(21,"L");
        map.put(22,"M");
        map.put(23,"N");
        map.put(24,"O");
        map.put(25,"P");
        map.put(26,"Q");
        map.put(27,"R");
        map.put(28,"S");
        map.put(29,"T");
        map.put(30,"U");
        map.put(31,"V");
        map.put(32,"W");
        map.put(33,"X");
        map.put(34,"Y");
        map.put(35,"Z");


    }
    public static void main(String[] args) {
        System.out.println(getRadix("112"));        //expected output: [3, 27, 13, 15]
        System.out.println(getRadix("123"));        //expected output: [6]
        System.out.println(getRadix("5321"));       //expected output: []
        System.out.println(getRadix("1A"));         //expected output: []

    }

    private static Set<Integer> getRadix(String number){
        int chastnoe;
        int delimoe;
        int ostatok = 1;
        boolean flag = true;
        Integer intResult;
        Integer setNumber;

        HashSet<Integer> set = new HashSet<>();

        StringBuilder sb =new StringBuilder();
        try {
            int num = Integer.parseInt(number);
            delimoe = num;
            for (int delitel = 2; delitel < 36; delitel++){
                setNumber = delitel;
                while (flag){
                    chastnoe = delimoe/delitel;
                    ostatok = delimoe%delitel;
                    delimoe = chastnoe;
                    String symbolToAdd = map.get(ostatok);
                    sb.append(symbolToAdd);
                    if(chastnoe < delitel){sb.append(chastnoe); flag = false;}
                }
                sb.reverse();
                String result = sb.toString();
                if (isPalindrom(result)){set.add(setNumber); }

                sb.delete(0, sb.capacity() - 1);
                flag = true;
                delimoe = num;
            }
        }catch(NumberFormatException e){
            return Collections.EMPTY_SET;
        }
        return set;
    }
    private static boolean isPalindrom(String integer){
        StringBuilder sb = new StringBuilder(integer);
        String revInteger = sb.reverse().toString();

        for(int i = 0; i < integer.length(); i++){
            if (integer.charAt(i) != revInteger.charAt(i)){return false;}
        }
        return true;
    }
}