package main
import(
"bufio"
"os"
"fmt"
"sort"
)
type SortWord struct{
Word string
Count int
}
type sortW []SortWord
func (s sortW) Len() int{return len(s)}
func (s sortW) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s sortW) Less(i, j int) bool {
if s[i].Count == s[j].Count {
return s[i].Word < s[j].Word
}else{
return s[i].Count > s[j].Count
}
}
func newWordSort(m map[string]int) []string {
var w []string
for loop, _ := range m {
w = append(w, string(loop))
}
sort.Strings(w)
return w
}
func newValueSort(m map[string]int, w []string) sortW {
tmpWs := make(sortW, 0)
for loop := 0; loop< len(w); loop++{
tmpW := SortWord{
Word : w[loop],
Count : m[w[loop]],
}
tmpWs = append(tmpWs, tmpW)
}
sort.Sort(tmpWs)
return tmpWs
}
func strDic(s string) string{
var tmpStr string
tmpMap := make(map[string]int)
for loop := range s {
tmpMap[string(s[loop])]++
}
newMap := newValueSort(tmpMap, newWordSort(tmpMap))
for _, v := range newMap{
tmpStr += string(v.Word)
}
return tmpStr
}
func main(){
var params []string
input := bufio.NewScanner(os.Stdin)
for input.Scan(){
params = append(params, input.Text())
}
for loop:= 0; loop< len(params); loop++{
res := strDic(params[loop])
fmt.Println(res)
}
}