#include <bits/stdc++.h>
using namespace std;
//思路:1、分割字符串:遇到非英文的其他字符则分割;2、把子字符串放入set容器自动排序
//思路:开辟一个26长度的数组空间表示26位字母出现次数;从头开始遍历即实现按顺序输出;将字母按顺序存入之后即可直接替换原字符串。
int main() {
string s;
vector<char> vec;
getline(cin,s);
for(int i=0;i<26;i++){//i从A开始遍历26个字母,即在字符串中从a/A开始找,如果找到的话则放入vec
for(int j=0;j<s.length();j++){//从字符串的开头开始找到末尾,即使字母相同也可以按顺序存放
if(s[j]-'a'==i||s[j]-'A'==i){//字符-‘a’即为小写字母的ASCII码,字符-'A'为大写字母的Ascii码
vec.push_back(s[j]);
}
}
}
int j=0;
for(int i=0;i<s.length();i++){
if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A'))
s[i]=vec[j++];//如果是字母的话,则替换vec中排好顺序的字符,其他不变
}
cout<<s;
}
// 64 位输出请用 printf("%lld")