#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 30000
#define row 1001
#define col 1001
int is_upper(char a)
{
return((a >= 'A') && (a <= 'Z'));
}
int is_lower(char a)
{
return((a >= 'a') && (a <= 'z'));
}
char to_upper(char a)
{
if (is_lower(a))
{
return a - ('a' - 'A');
}
else
{
return a;
}
}
char tolower(char a)
{
if (is_upper(a))
{
return a + ('a' - 'A');
}
else
{
return a;
}
}
int char_cmp(char a, char b)
{
return(a - b);
}
int main()
{
char s[max];
char d[max];
int i = 0, j = 0, k = 0, m = 0, n = 0;
char a, b, c;
while (gets(s) != NULL)
{
m = strlen(s);
strcpy(d, s);
for (i = 0, j = 0; s[i] != '\0'; i++)
{
if (is_upper(s[i]) || is_lower(s[i]))//skip illegal character
{
s[j++] = s[i];
d[i] = -1;
}
}
s[j] = 0;
for (i = 0, m = 0; s[i] != '\0'; i++)
{
for (j = i + 1, k = i; s[j] != '\0'; j++)
{
if (is_upper(s[j]))
{
if (char_cmp(s[j], to_upper(s[k])) < 0)
{
k = j;
}
}
else if (is_lower(s[j]))
{
if (char_cmp(s[j], tolower(s[k])) < 0)
{
k = j;
}
}
else
{
}
}
if (k > i)
{
a = s[k];
for (j = k; j > i; j--)
{
s[j] = s[j - 1];
}
s[i] = a;
}
}
for (i = 0, j = 0; d[i] != '\0'; i++)
{
if (d[i] == -1)
{
d[i] = s[j++];
}
}
puts(d);
}
return 0;
}