import java.util.*;
import java.lang.*;
import java.io.*;
//double C(String x,Map<Character,Integer>f){double H=0,g;for(char c:x.toCharArray())f.put(c,f.containsKey(c)?f.get(c)+1:1);for(char c:f.keySet()){g=f.get(c);H+=g*Math.log(g/x.length())/Math.log(2);}return-H;}
class Ideone
{
{
double H=0,g;
for(char c:x.toCharArray())
{
f.put(c, f.containsKey(c) ? f.get(c)+1 : 1);
}
for(char c : f.keySet())
{
g = f.get(c);
H
+= (g
/Math.
log(2)) * Math.
log(g
/x.
length()); }
return-H;
}
{
System.
out.
println("'This is a test.'=> "+C
("This is a test.",
new TreeMap
<Character,Integer
>())); System.
out.
println("'00001111' => "+C
("00001111",
new TreeMap
<Character,Integer
>())); System.
out.
println("'cwmfjordbankglyphsvextquiz' => "+C
("cwmfjordbankglyphsvextquiz",
new TreeMap
<Character,Integer
>())); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovL2RvdWJsZSBDKFN0cmluZyB4LE1hcDxDaGFyYWN0ZXIsSW50ZWdlcj5mKXtkb3VibGUgSD0wLGc7Zm9yKGNoYXIgYzp4LnRvQ2hhckFycmF5KCkpZi5wdXQoYyxmLmNvbnRhaW5zS2V5KGMpP2YuZ2V0KGMpKzE6MSk7Zm9yKGNoYXIgYzpmLmtleVNldCgpKXtnPWYuZ2V0KGMpO0grPWcqTWF0aC5sb2coZy94Lmxlbmd0aCgpKS9NYXRoLmxvZygyKTt9cmV0dXJuLUg7fQoKY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgZG91YmxlIEMoU3RyaW5nIHgsTWFwPENoYXJhY3RlcixJbnRlZ2VyPmYpCgl7CgkJZG91YmxlIEg9MCxnOwoJCQoJCWZvcihjaGFyIGM6eC50b0NoYXJBcnJheSgpKQoJCXsKCQkJZi5wdXQoYywgZi5jb250YWluc0tleShjKSA/IGYuZ2V0KGMpKzEgOiAxKTsKCQl9CgkJCgkJZm9yKGNoYXIgYyA6IGYua2V5U2V0KCkpCgkJewoJCQlnID0gZi5nZXQoYyk7CgkJCUggKz0gKGcvTWF0aC5sb2coMikpICogTWF0aC5sb2coZy94Lmxlbmd0aCgpKTsKCQl9CgkJCgkJcmV0dXJuLUg7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN5c3RlbS5vdXQucHJpbnRsbigiJ1RoaXMgaXMgYSB0ZXN0Lic9PiAiK0MoIlRoaXMgaXMgYSB0ZXN0LiIsbmV3IFRyZWVNYXA8Q2hhcmFjdGVyLEludGVnZXI+KCkpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIicwMDAwMTExMScgPT4gIitDKCIwMDAwMTExMSIsbmV3IFRyZWVNYXA8Q2hhcmFjdGVyLEludGVnZXI+KCkpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIidjd21mam9yZGJhbmtnbHlwaHN2ZXh0cXVpeicgPT4gIitDKCJjd21mam9yZGJhbmtnbHlwaHN2ZXh0cXVpeiIsbmV3IFRyZWVNYXA8Q2hhcmFjdGVyLEludGVnZXI+KCkpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIicgICAgICAgICAgICAgICAnID0+ICIrQygiICAgICAgICAgICAgICAgIixuZXcgVHJlZU1hcDxDaGFyYWN0ZXIsSW50ZWdlcj4oKSkpOwoJfQp9CgoK