import java.util.*;

/**
 * NC330 36进制加法
 * @author d3y1
 */
public class Solution {
    private final int RADIX  = 36;

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param A string字符串
     * @param B string字符串
     * @return string字符串
     */
    public String thirtysixAdd (String A, String B) {
        String digits = "0123456789abcdefghijklmnopqrstuvwxyz";
        HashMap<Character, Integer> charNumMap = new HashMap<>();
        HashMap<Integer, Character> numCharMap = new HashMap<>();
        for(int i=0; i<RADIX; i++){
            charNumMap.put(digits.charAt(i), i);
            numCharMap.put(i, digits.charAt(i));
        }

        int lenA = A.length();
        int lenB = B.length();

        int carry = 0;
        int sum;
        int digit,digitA,digitB;
        StringBuilder sb = new StringBuilder();
        for(int i=lenA-1,j=lenB-1; i>=0||j>=0||carry>0; i--,j--){
            digitA = (i>=0)?charNumMap.get(A.charAt(i)):0;
            digitB = (j>=0)?charNumMap.get(B.charAt(j)):0;
            
            sum = digitA + digitB + carry;
            digit = sum % RADIX;
            carry = sum / RADIX;

            // sb.insert(0, numCharMap.get(digit)) => 超时
            sb.append(numCharMap.get(digit));
        }

        return sb.reverse().toString();
    }
}