#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define maxn 100010
using namespace std;
typedef struct STR {
int a;
char c;
int pos;
} S;
bool cmp(S s1, S s2) {
if (s1.a != s2.a)return s1.a < s2.a;
return s1.pos < s2.pos;
}
int main() {
string s;
while (getline(cin, s)) {
int pos = 0;
S str[maxn];
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'A' && s[i] <= 'Z') {
str[pos].c = s[i];
str[pos].a = s[i] - 'A';
str[pos].pos = i;
pos++;
} else if (s[i] >= 'a' && s[i] <= 'z') {
str[pos].c = s[i];
str[pos].a = s[i] - 'a';
str[pos].pos = i;
pos++;
}
}
sort(str, str + pos, cmp);
pos = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] >= 'A' && s[i] <= 'Z') {
cout << str[pos++].c;
} else if (s[i] >= 'a' && s[i] <= 'z') {
cout << str[pos++].c;
} else cout << s[i];
}
cout << endl;
}
}
// 64 位输出请用 printf("%lld")