#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);
}
}