#include <stdio.h>
#include <stdlib.h>
#include <string.h>


typedef struct {
    char a;
    int tag;
} str;

void bubble_sort(str a[], int n) {
    int i, j = 0;
    str temp;
    for (i = 0; i < n; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (a[j].a > a[j + 1].a) {
                temp = a[j + 1];
                a[j + 1] = a[j];
                a[j] = temp;
            }
        }
    }
}

int main() {
    char* str_1 = (char*)malloc(sizeof(char) * 1000);
    while (gets(str_1) != NULL) {
    int N = 'a' -'A';
    int n = 0;
    n=strlen(str_1);
    //printf("%d\n",n);
    str str_2[n];
    int count = 0, j = 0;
    for (int i = 0; i < n; i++) {
        j = i - count;
        if (str_1[i] >= 'A' && str_1[i] <= 'Z' ) {
            str_2[j].a = str_1[i];
            str_2[j].tag = 0;
        } else if (str_1[i] >= 'a' && str_1[i] <= 'z') {
            str_2[j].a = str_1[i] - N;
            str_2[j].tag = 1;
        } else {
            count++;
        }
    }
    int n2 = n - count;
    //printf("%d\n",n2);
    bubble_sort(str_2, n2);
   
    
    count = 0;
    j = 0;
    for (int i = 0; i < n; i++) {
        j = i - count;
        if (str_1[i] >= 'A' && str_1[i] <= 'Z' || str_1[i] >= 'a' && str_1[i] <= 'z') {
            if (str_2[j].tag == 0) {
                str_1[i] = str_2[j].a;
            } else if (str_2[j].tag == 1) {
                str_1[i] = str_2[j].a + N;
            }
        } else {
        count++;
        }
    }
    

        printf("%s", str_1);
    

}

}