#include<bits/stdc++.h>
using namespace std;
struct node{
char c;
int pos;
}nd;
bool cmp(node a,node b)
{
if(isalpha(a.c)&&isalpha(b.c))
{
if(toupper(a.c)!=toupper(b.c))
{
return toupper(a.c)<toupper(b.c);
}else if(toupper(a.c)==toupper(b.c))
{
return a.pos<b.pos;
}
}
return true;
}
int main()
{
string str;
getline(cin,str);
int len = str.length();
char ch[len];
strcpy(ch,str.data());
vector<node> vec;
char temp[10010];
memset(temp,'|',sizeof(temp));//默认'|'不会出现
for(int i = 0;i<len; i++)
{
if(isalpha(ch[i])){
nd.c=ch[i];
nd.pos = i;
vec.push_back(nd);
}else{
temp[i] = ch[i];
}
}
sort(vec.begin(),vec.end(),cmp);
// for(vector<node>::iterator it = vec.begin();it != vec.end();it++)
// {
// printf("%c", it->c);
// }
//字母放进去
vector<node>::iterator put = vec.begin();
for(int i=0;i<len&&put!=vec.end();i++)
{
if(temp[i]=='|')
{
temp[i] = put->c;
put++;
}
}
for(int i = 0;i < len;i++){
cout<<temp[i];
}
return 0;
}