#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;
}