#别人的算法,非常牛,要学习,不要上来就写代码,要思考逻辑,写出优美的算法
#算法描述:
#假如a和c在string中的个数都是1,
#将a和c带入s.count(x)*1000-ord(x)公式,得到1000-ord(a)和1000-ord(c)
#因为ord(a)=97,ord(c)=99,所以1000-ord(a)>1000-ord(c)
#因为reverse=True,所以排序结果为a,c
#这符合本题的题意:如果统计的个数相同,则按照ASCII码由小到大排序输出

while True:
    try:
        s = input()
        ss = sorted(list(set(s)), key=lambda x:s.count(x)*1000-ord(x), reverse=True)
        print("".join(ss))
    except:
        break

#我的不优美算法
#输入
str1=list(input())

#建立字典统计各个字符出现的次数
dic1={}
for x in str1:
    if x in dic1:
        dic1[x]=dic1[x]+1
    else:
        dic1[x]=1

#对字典进行排序
sorted_list1 = sorted(dic1.items(), key=lambda item: item[1],reverse=True)

#如果字典中两个字符统计的个数相同,则按照ASCII码由小到大进行位置交换
#由于有n个字符,所以要重复n次循环,保证按照ASCII码由小到大进行排序
for n in range(len(str1)):
    for i in range(len(sorted_list1)-1):
        if sorted_list1[i][1]==sorted_list1[i+1][1]:
            if ord(sorted_list1[i][0])>ord(sorted_list1[i+1][0]):
                sorted_list1[i],sorted_list1[i+1]=sorted_list1[i+1],sorted_list1[i]

#输出
a=[]
for x in sorted_list1:
    a.append(x[0])
print(''.join(a))