import java.io.*;
import java.util.*;
class Main {
private static final char NEW_LINE = '\n';
public static void main
(String[] args
) {
int intchr;
try {
while ((intchr = reader.read()) != -1) {
if (intchr == NEW_LINE || intchr == '\r') {
if (map.isEmpty()) {
continue;
}
printResult(writer, map, true);
writer.write("\n");
map
= new HashMap
<Integer, Entry
>(); continue;
}
Entry integer = map.get(intchr);
if (integer == null) {
integer = new Entry(intchr);
map.put(intchr, integer);
}
integer.frequency++;
}
printResult(writer, map, false);
writer.flush();
}
}
Entry[] values = map.values().toArray(new Entry[map.size()]);
Arrays.
sort(values,
new Comparator
<Entry
>() { public int compare(Entry o1, Entry o2) {
int compare = o1.compareTo(o2);
if (compare == 0) {
return o2.value - o1.value;
}
return compare;
}
});
for (int i = 0; i < values.length; i++) {
Entry value = values[i];
writer.
write(String.
valueOf(value.
value)); writer.write(" ");
writer.
write(String.
valueOf(value.
frequency));
if (i + 1 == values.length && !printLastN) {
continue;
}
writer.write("\n");
}
}
static class Entry implements Comparable<Entry> {
int frequency;
final int value;
Entry(int value) {
this.value = value;
}
@Override
public boolean equals
(Object o
) { if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Entry entry = (Entry) o;
if (value != entry.value) return false;
return true;
}
@Override
public int hashCode() {
return value;
}
public int compareTo(Entry o) {
return frequency - o.frequency;
}
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgTWFpbiB7CgoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgTkVXX0xJTkUgPSAnXG4nOwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCiAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pLCAxMDI0ICogMTAyNCk7CiAgICAgICAgQnVmZmVyZWRXcml0ZXIgd3JpdGVyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoU3lzdGVtLm91dCkpOwoKICAgICAgICBpbnQgaW50Y2hyOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIE1hcDxJbnRlZ2VyLCBFbnRyeT4gbWFwID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgRW50cnk+KCk7CiAgICAgICAgICAgIHdoaWxlICgoaW50Y2hyID0gcmVhZGVyLnJlYWQoKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmIChpbnRjaHIgPT0gTkVXX0xJTkUgfHwgaW50Y2hyID09ICdccicpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWFwLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcHJpbnRSZXN1bHQod3JpdGVyLCBtYXAsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiXG4iKTsKICAgICAgICAgICAgICAgICAgICBtYXAgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBFbnRyeT4oKTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgRW50cnkgaW50ZWdlciA9IG1hcC5nZXQoaW50Y2hyKTsKICAgICAgICAgICAgICAgIGlmIChpbnRlZ2VyID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyID0gbmV3IEVudHJ5KGludGNocik7CiAgICAgICAgICAgICAgICAgICAgbWFwLnB1dChpbnRjaHIsIGludGVnZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW50ZWdlci5mcmVxdWVuY3krKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludFJlc3VsdCh3cml0ZXIsIG1hcCwgZmFsc2UpOwogICAgICAgICAgICB3cml0ZXIuZmx1c2goKTsKICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CgogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50UmVzdWx0KEJ1ZmZlcmVkV3JpdGVyIHdyaXRlciwgTWFwPEludGVnZXIsIEVudHJ5PiBtYXAsIGJvb2xlYW4gcHJpbnRMYXN0TikgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICBFbnRyeVtdIHZhbHVlcyA9IG1hcC52YWx1ZXMoKS50b0FycmF5KG5ldyBFbnRyeVttYXAuc2l6ZSgpXSk7CgogICAgICAgIEFycmF5cy5zb3J0KHZhbHVlcywgbmV3IENvbXBhcmF0b3I8RW50cnk+KCkgewogICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoRW50cnkgbzEsIEVudHJ5IG8yKSB7CiAgICAgICAgICAgICAgICBpbnQgY29tcGFyZSA9IG8xLmNvbXBhcmVUbyhvMik7CiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG8yLnZhbHVlIC0gbzEudmFsdWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBFbnRyeSB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgICAgICAgd3JpdGVyLndyaXRlKFN0cmluZy52YWx1ZU9mKHZhbHVlLnZhbHVlKSk7CiAgICAgICAgICAgIHdyaXRlci53cml0ZSgiICIpOwogICAgICAgICAgICB3cml0ZXIud3JpdGUoU3RyaW5nLnZhbHVlT2YodmFsdWUuZnJlcXVlbmN5KSk7CgogICAgICAgICAgICBpZiAoaSArIDEgPT0gdmFsdWVzLmxlbmd0aCAmJiAhcHJpbnRMYXN0TikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJcbiIpOwogICAgICAgIH0KCiAgICB9CgogICAgc3RhdGljIGNsYXNzIEVudHJ5IGltcGxlbWVudHMgQ29tcGFyYWJsZTxFbnRyeT4gewogICAgICAgIGludCBmcmVxdWVuY3k7CiAgICAgICAgZmluYWwgaW50IHZhbHVlOwoKICAgICAgICBFbnRyeShpbnQgdmFsdWUpIHsKICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogICAgICAgIH0KCgogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewogICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCB8fCBnZXRDbGFzcygpICE9IG8uZ2V0Q2xhc3MoKSkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgRW50cnkgZW50cnkgPSAoRW50cnkpIG87CgogICAgICAgICAgICBpZiAodmFsdWUgIT0gZW50cnkudmFsdWUpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGludCBjb21wYXJlVG8oRW50cnkgbykgewogICAgICAgICAgICByZXR1cm4gZnJlcXVlbmN5IC0gby5mcmVxdWVuY3k7CiAgICAgICAgfQogICAgfQoKfQo=