#include <iostream>
#include <string>
#include <vector>
using namespace std;
/*
* 字符串排序
* 思路:字母从a~z或A~Z一共26个字母,例如字母'b' - 'a' = 1;因此从0~25依次插入a~z或A~Z;
* 在字符串范围内,当strIn[i]>= 'a' && strIn[i] <= 'z' || strIn[i]>= 'A' && strIn[i] <= 'Z',
将排序的字符串插入原来的strIn中,且非英文字母不变
* 步骤:
* 第一步:输入字符串strIn
* 第二步: 对a~z或A~Z的字符进行排序,且不区分大小,查找a或A为第一个位置
* 第三步:将非英文字符保持原来位置
*/
string StringSort(string strIn)
{
if (strIn.size() == 0) {
return nullptr;
}
int strInLen = strIn.size();
vector<int> vec;
// 对a~z或A~Z的字符进行排序,且不区分大小
for(int i = 0; i < 26; i++) { // a~z或A~Z为26个字符
for(int j = 0; j < strInLen; j++) {
if((strIn[j] - 'a' == i) || (strIn[j] - 'A' == i)) {
vec.push_back(strIn[j]);
}
}
}
// 将非英文字符保持原来位置
for(int i = 0, k = 0; (i < strInLen) && (k < vec.size()); i++) {
if((strIn[i] >= 'a' && strIn[i] <= 'z') || (strIn[i] >= 'A' && strIn[i] <= 'Z')) {
strIn[i] = vec[k];
k++;
}
}
return strIn;
}
int main()
{
string strIn;
while (getline(cin, strIn)) {
cout<<StringSort(strIn)<<endl;
}
return 0;
}