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)
    }
}