#include <iostream>
#include <string> 
#include <map>
#include <vector>
#include <algorithm>

using namespace std;


/*
题意:根据字符进行统计,最少的字符进行删除,剩下输出。
思路:采用map<string, int>, 第一次出现为1,再一次出现进行累加,统计每个字符出现次数;
查找出现最少次数,删除最少出现的元素。
*/
string DeleteMinNumsStr(string strIn)
{
    map<char, int> strMap;
    for(int i = 0; i < strIn.length(); i++) {
        auto iter = strMap.find(strIn[i]);
        if(iter != strMap.end()) {
            iter->second++;
        } else {
            strMap[strIn[i]] = 1;
        }
    }
    vector<int> vec;
    for(auto iter = strMap.begin(); iter != strMap.end(); iter++) {
        vec.push_back(iter->second);
    }
    sort(vec.begin(), vec.end());
    int minValue = vec[0];
    
    for(auto iter = strMap.begin(); iter != strMap.end(); iter++) {
        if(iter->second == minValue) {
            
            #ifdef FIRST_METHOND
            /*
            remove移除[first, last)之中所有与value相等的元素,移除[first, last)之中所有与value相等的元素。
            这个算法不是正真从容器中删除那些元素(即容器大小),
            而是将每一个不与value相等的元素轮番赋予给first之后的空间。返回值ForwardIterator标识出重新整理后的最后一个元素的位置。
            
            erase 删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器.
            */
            //strIn.erase(remove(strIn.begin(), strIn.end(), iter->first), strIn.end());
            #else
            auto iterEnd = remove(strIn.begin(), strIn.end(), iter->first);
            string strTemp;
            for(auto iter1 = strIn.begin(); iter1 != iterEnd; iter1++) {
                strTemp += *iter1;
            }
            strIn.clear();
            strIn = strTemp;
            #endif
        }
    }
    
    return strIn;
}

int main()
{
    string strIn;
    while(cin>>strIn) {
        cout<<DeleteMinNumsStr(strIn)<<endl;
    }
    return 0;
}