#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")