/*
   算法思想:1.如果num[i]<=num[i+1],如果count[num[i]]>1,则删除num[i],否则不删除。
             2.数字的最大值总是保留第一个出现的位置,其他则删除。
     4 2 3 2 4
   首先删除的非最大值:
     ..... 得到:4 3 2 4
   然后处理最大数字值,保留第一个出现的:
     ..... 得到:4 3 2
*******************************************************************************************************
   答案有问题。。请看评论。。测试用例少,所以AC了。有同学,直接set得到不同的数字,然后大到小输出60%。
   谢谢各位的指正,给出的case。
*/
#include<iostream>
#include<climits>
#include<cstring>
#include<string>
using namespace std;
int main(){
   string str;
   while(getline(cin,str)){
    if(str.length()<=1) {cout<<str<<endl; continue;}
   
    /*num_count 计数数组 */
    int num_count[10]={0};
        /* 最大值位置 */
    int max_val=INT_MIN;int max_pos=-1;
    for(int i=0;i<str.length();i++){
        int tmp=str[i]-'0';
        num_count[tmp]++;
        if(tmp>max_val) {max_val=tmp;max_pos=i;}
    }
     /*删除的位置,标志位*/
    int *to_delete=new int[str.length()];
    memset(to_delete,0,sizeof(int)*str.length());
     for(int i=1;i<str.length();i++){
        int tmp=str[i-1]-'0';
        if(str[i]>=str[i-1]&&num_count[tmp]>1){
            num_count[tmp]-=1;
            to_delete[i-1]=-1;
        }
     }
     
     string result;
     for(int i=0;i<str.length();i++){
        if(i==max_pos) result=result+str[i];
        if(to_delete[i]!=-1&&(str[i]-'0'!=max_val)) result=result+str[i];
        
     }
    cout<<result<<endl;
   }
   return 0;
}