import java.util.*; public class Main { public static void main(String[] args) { // 标准输入 Scanner input = new Scanner(System.in); // 获取输入的两个字符串 String str1 = input.next(); String str2 = input.next(); // 合并两个字符串 String str3 = str1.concat(str2); // 将字符串按下标奇偶切分后再拼接 StringBuffer oddStr = new StringBuffer(); StringBuffer evenStr = new StringBuffer(); for (int i = 0; i < str3.length(); i++) { char c = str3.charAt(i); if (i % 2 == 1) { // 下标为奇数 oddStr.append(c); } else { // 下标为偶数 evenStr.append(c); } } // 对奇偶字符串转数组后进行排序 char[] oddArr = oddStr.toString().toCharArray(); char[] evenArr = evenStr.toString().toCharArray(); Arrays.sort(oddArr); Arrays.sort(evenArr); // 构建排序后的拼接字符串 StringBuffer sortedStr = new StringBuffer(); int oddIndex = 0; int evenIndex = 0; while (oddIndex < oddArr.length && evenIndex < evenArr.length) { sortedStr.append(evenArr[evenIndex++]).append(oddArr[oddIndex++]); } // 偶数组可能残留数据,收一下尾 if (evenIndex == evenArr.length-1) sortedStr.append(evenArr[evenIndex]); // 排序完成,测试 // System.out.println(sortedStr.toString()); // 遍历转换相应字符 StringBuffer res = new StringBuffer(); for (char c : sortedStr.toString().toCharArray()) { if (!shouldChange(c)) { // 不需要转换,直接拼接 res.append(c); } else { // 需要转换,转转换后再拼接 res.append(change(c)); } } // 转换拼接完成,输出结果 System.out.println(res.toString()); } // 判断字符是否需要转换 private static boolean shouldChange(char c) { if ('0' <= c && c <= '9') return true; if ('a' <= c && c <= 'f') return true; if ('A' <= c && c <= 'F') return true; return false; } // 转换字符的函数 private static char change(char c) { // 将字符按十六进制解析成十进制数字 int num = Integer.parseInt(String.valueOf(c),16); // 十进制数字转二进制字符串 String binary = Integer.toBinaryString(num); // 将二进制字符串补足至4位 while (binary.length() < 4) { binary = "0" + binary; } // 翻转二进制字符串 StringBuffer temp = new StringBuffer(binary); temp.reverse(); binary = temp.toString(); // 将二进制字符串解析成十进制数字 int newNum = Integer.parseInt(binary,2); // 十进制数字转十六进制字符 char newC = Integer.toHexString(newNum).charAt(0); // 转大写再返回结果 return Character.toUpperCase(newC); } }