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

//分别统计小写个数、大写个数
//在原数组中按字母表顺序寻找每个字母*(大小写)并写入新数组。
//寻找时利用个数作为条件可以节省时间。
//与原数组进行比较,分别输出新数组中重新排序后的字母和原数组原位置中的非字母。
//scanf遇到空格会停止,所以用结尾标志位'\n'来循环输入。


char input[1000],in,temp[1000],new[1000];
int alpha[26],beta[26];
int i=0,j=0,k=0,len,flag[26];

int main()
{
  
        while(1)//输入数据
    {
        if(in != '\n')
        {
           scanf("%c",&in);
           input[i] = in; 
           i++;
        }
        else
            break;        
    }

    len=i;//获取数组长度
      
   
      for(i=0;i<len;i++)//记录出现次数
      {
        if((input[i]>='A')&&(input[i]<='Z'))  //大写
        {
            alpha[input[i]-'A']++;
            
        }
          else if((input[i]>='a')&&(input[i]<='z'))//小写
          
          {
              beta[input[i]-'a']++;
        
          }
        
      } 
 
    
    
    for(i=0;i<26;i++)//取每一个字母
    {
           
     if(alpha[i]+beta[i]>0)//判断该字母在序列中是否存在
     {
         for(j=0;j<len;j++)//导入序列
         {
            
             if((input[j]==i+'A')||(input[j]==i+'a'))//按顺序寻找字母,一次只找一个字母的大小写
             {               
                 temp[k]=input[j];//将寻找到的字母放入新数组
                 k++;
             }
         
         }
         
         
     }
        
        
        
    }
    
    j=0;
    for(i=0;i<len;i++)//将所有数据写入数组
    {
        if(((input[i]>='A')&&(input[i]<='Z'))||((input[i]>='a')&&(input[i]<='z')))//字母项
        {
           new[i]=temp[j];//将排好顺序的字母写入按原格式填入输出数组的空字母位。
            j++;
           
        }
        else//非字母项,按原数组各位置填入输出数组。
        {
            
            new[i]=input[i];
            
            
        }   
        
        
        
    }
    
    for(i=0;i<len;i++)//输出
    {
        
       printf("%c", new[i]);
        
    }
    
    
    
    
}