import java.util.Scanner;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
/*
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char[] ch = sc.nextLine().toCharArray();
char[] newCh = new char[ch.length];
char flag = 0;
for (int i = 0; i < ch.length; ) {
for (int j = 0; j < ch.length; j++) {
//ASCALL码 中没有空格
if(ch[j]=='a'+flag || ch[j]=='A'+flag){
newCh[i] = ch[j];
i++;
}
}
flag++;
if('a'+flag > 'z' || 'A'+flag > 'Z'){//所有字母已经排完序了。
break;
}
}
int j = 0;
for (int i = 0; i <ch.length; i++) {
if(ch[i]==' '){
System.out.print(' ');
}else if( (!(ch[i]>='a'&&ch[i]<='z')) && (!(ch[i]>='A'&&ch[i]<='Z'))){
System.out.print(ch[i]);
}else {
System.out.print(newCh[j]);
j++;
}
}
}
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
// 定义字母列表
List<Character> letterList = new ArrayList<>();
// 将字符串转换成字符数组,遍历每一个字符,是字符则添加到列表中
for(Character c : s.toCharArray()){
if(Character.isLetter(c)){
letterList.add(c);
}
}
// 按照小写英文字母排序规则排序
letterList.sort(Comparator.comparingInt(Character :: toLowerCase));
StringBuilder result = new StringBuilder();
for (int i = 0, j = 0; i < s.length(); i++) {
if(Character.isLetter(s.charAt(i))){
result.append(letterList.get(j++));
}else {
// 若是非英文字母则直接添加
result.append(s.charAt(i));
}
}
System.out.println(result);
sc.close();
}
/*
本系列归档至https://github.com/waylau/nowcoder-exam-oj
《Java 数据结构及算法实战》:https://github.com/waylau/java-data-structures-and-algorithms-in-action
《数据结构和算法基础(Java 语言实现)》(柳伟卫著,北京大学出版社出版):https://item.jd.com/13014179.html
* */
}