const rl = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
while ((line = await readline())) {
// 1.合并
const initialArr = line.split(" ").join("");
// 2.排序(按奇偶位置)
const tempOddArr = [];
const tempEvenArr = [];
for (let i = 0; i < initialArr.length; i++) {
let item = initialArr[i];
if (i % 2 == 0) {
tempEvenArr.push(item);
} else {
tempOddArr.push(item);
}
}
tempEvenArr.sort();
tempOddArr.sort();
let targetStr = "";
// 取最大长度
const evenLen = tempEvenArr.length
const oddLen = tempOddArr.length
const len = Math.max(evenLen, oddLen)
// 合并
for (let i = 0; i < len; i++) {
targetStr += (tempEvenArr[i] || '') + (tempOddArr[i] || '');
}
// 3.字符串转换(十六进制换成2进制或者十进制,再倒序,再转成大写)
let targetArr = targetStr.split("");
let result = [];
for(let i = 0;i < targetArr.length; i++){
let item = targetArr[i]
let finalStr = item
if (!isNaN(item) && item !== '') {
// 数字转成2进制 倒序
let num = Number(item).toString(2);
num = num.padStart(4, 0).split("").reverse().join("");
const tempItem = parseInt(num, 2);
// 大于等于10 转16进制
if (tempItem >= 10) {
finalStr = String.fromCharCode(tempItem + 55);
} else {
finalStr = String(tempItem);
}
}
// 小写字母
if (/[a-f]/.test(item)) {
let tempItem = parseInt(item, 16);
const num = tempItem.toString(2);
item = num.padStart(4, 0).split("").reverse().join("");
tempItem = parseInt(item, 2);
if (tempItem >= 10) {
// 有小写的需要转大写
finalStr = String.fromCharCode(tempItem + 55);
} else {
finalStr = String(tempItem);
}
}
// 大写字母
if (/[A-F]/.test(item)) {
let tempItem = item.charCodeAt() - 55;
const num = tempItem.toString(2);
item = num.padStart(4, 0).split("").reverse().join("");
tempItem = parseInt(item, 2);
if (tempItem >= 10) {
finalStr = String.fromCharCode(tempItem + 55);
} else {
finalStr = String(tempItem);
}
}
result.push(finalStr);
}
console.log(result.join(""));
}
})();