# from https://github.com/zordsdavini/abcex

class Abcex:

    abc_map = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 'a',
            11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f', 16: 'g', 17: 'h', 18:
            'i', 19: 'j', 20: 'k', 21: 'l', 22: 'm', 23: 'n', 24: 'o', 25: 'p',
            26: 'q', 27: 'r', 28: 's', 29: 't', 30: 'u', 31: 'v', 32: 'w', 33:
            'x', 34: 'y', 35: 'z'}

    inv_abc_map = {str(v): k for k, v in abc_map.items()}

    def encode(self, number):
        number = int(number)
        result = ''

        while number > 0:
            result = "%s%s" % (self.abc_map[number % 36], result)
            number //= 36

        return result


    def decode(self, string):
        result = 0
        string = str(string)
        string = reversed(str(string))

        for i, c in enumerate(string):
            result = 36**i * self.inv_abc_map[c] + result

        return result