翻转的时候注意会多左移一次,因此需要右移一位来抵消。


u = "".join(input().strip().split())
u_1 = u[0::2]  # 奇数位
u_1 = sorted(u_1, key=lambda x:ord(x))
u_2 = u[1::2]  # 偶数位
u_2 = sorted(u_2, key=lambda x:ord(x))

ord_a = ord("a")
ord_A = ord("A")
ord_f = ord("f")
ord_F = ord("F")
ord_0 = ord("0")
ord_9 = ord("9")

def process_num(c):
    c_num = ord(c)
    # 转化为十进制数
    dec_num = 0
    if ord_0 <= c_num <= ord_9:
        dec_num = c_num - ord_0
    elif ord_a <= c_num <= ord_f:
        dec_num = c_num - ord_a + 10
    elif ord_A <= c_num <= ord_F:
        dec_num = c_num - ord_A + 10
    else:
        return c

    # 翻转二进制
    reverse_num = 0
    for _ in range(4):  # 十六进制只有4个数字
        tmp = dec_num % 2
        reverse_num += tmp
        dec_num >>= 1
        reverse_num <<= 1
    reverse_num >>= 1

    # 转化为大写的十六进制数
    if 0 <= reverse_num <= 9:
        result = str(reverse_num)
    else:
        result = chr(ord_A + reverse_num - 10)
    return result

result = []
for each in range(len(u_2)):
    result.append(process_num(u_1[each]))
    result.append(process_num(u_2[each]))

if len(u_1) > len(u_2):
    result.append(process_num(u_1[-1]))
print("".join(result))