#include <string.h>
#include <math.h>
/* 按要求,asccii码大小排序 */
int sort_merge(char* str)
{
int ret = 0;
int len = strlen(str);
for(int i = 0; i < len; i+=2)
{
for(int j = i; j < len; j+=2)
{
if(str[i] > str[j])
{
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
if(len - 1 != i && j+1 < len)
{
if(str[i+1] > str[j+1])
{
char tmp = str[i+1];
str[i+1] = str[j+1];
str[j+1] = tmp;
}
}
}
}
// printf("sort_merge = %s \n", str);
return ret;
}
/* 字符串转换为十六进制 */
int char_to_hex(char ch)
{
int ret = -1;
if(ch >= 'A' && ch <= 'Z')
{
ret = ch - 'A' + 10;
}
else if(ch >= 'a' && ch <= 'z')
{
ret = ch - 'a' + 10;
}
else if(ch >= '0' && ch <= '9')
{
ret = ch - '0';
}
return ret;
}
char hex_to_char(int num)
{
char ret = -1;
if(num >= 10 && num <= 15)
{
ret = num + 'A' - 10;
}
else if( num >= 0 && num <= 9)
{
ret = num + '0';
}
return ret;
}
/* 二进制翻转 */
int hex_revese_to_char(int num)
{
int ret = 0;
int bit[4];
/* 每次取模除2 得到整数的 二进制数据 */
for(int j = 0; j < 4; j++)
{
bit[j] = num % 2;
num /= 2;
}
// printf("bit = %d %d %d %d \n", bit[0], bit[1], bit[2], bit[3]);
for(int k = 0; k < 4; k++)
{
ret += bit[3-k] * (int)pow(2 ,k);
}
return ret;
}
int reverse(char* str)
{
int ret = 0;
int len = 0;
len = strlen(str);
int reverse_data[len];
for(int i = 0; i < len; i++)
{
if((str[i] >= 'a' && str[i] <= 'f')
|| (str[i] >= 'A' && str[i] <= 'F')
|| (str[i] >= '0' && str[i] <= '9'))
{
int hex = char_to_hex(str[i]);
int reverse_hex = hex_revese_to_char(hex);
str[i] = hex_to_char(reverse_hex);
// printf("hex = %d, revese_hex = %d, revese_data = %c \n", hex, reverse_hex, str[i]);
}
}
return ret;
}
int main()
{
char str1[201] = {0};
char str2[101] = {0};
scanf("%s %s", str1, str2);
strcat(str1, str2);
sort_merge(str1);
reverse(str1);
printf("%s\n", str1);
return 0;
}