依旧是priorityQueue

import java.util.*;

class Pair implements Comparable<Pair>{
    private int value;
    private int times;
    public Pair(int value, int times) {
        this.value = value;
        this.times = times;
    }
    public int compareTo(Pair that) {
        if (this.times == that.times) {
            return this.value - that.value;
        }
        return that.times - this.times;
    }
    public char get() {
        return (char)value;
    }
}

public class Main {

    private final int N = 127;
    public Main() {
    }

    public String count(String str) {
        int[] arr = new int[N];
        for (char ch : str.toCharArray()) {
            if (ch >= N) continue;
            arr[ch]++;
        }
        PriorityQueue<Pair> pq = new PriorityQueue<>();
        for (int i = 0; i < N; i++) {
            if (arr[i] != 0) { 
                pq.offer(new Pair(i, arr[i]));
            }
        }
        StringBuilder res = new StringBuilder();
        while (!pq.isEmpty()) {
            res.append(pq.poll().get());
        }
        return res.toString();
    }

    public static void main(String[] args) {
        Main solution = new Main();
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String str = in.nextLine();
            String res = solution.count(str);
            System.out.println(res);
        }

    } 
}