import java.util.HashMap;
 
class Problem {
    private int count;
    private final HashMap
<String, Integer
> counts
;  
    public Problem() {
        this.counts = new HashMap<>();
    }
 
    public void addName
(String name
) {         Integer nameCount 
= counts.
get(name
);         if (nameCount == null) {
            nameCount = 1;
            counts.put(name, nameCount);
        } else {
            counts.put(name, nameCount + 1);
        }
        count++;
    }
 
    public double nameProportion
(String name
) {         return counts.get(name) / (double) count;
    }
 
    public static void main
(String[] args
) {         Problem namesCount = new Problem();
 
        namesCount.addName("James");
        namesCount.addName("John");
        namesCount.addName("Mary");
        namesCount.addName("Mary");
 
        System.
out.
println("Fraction of Johns: " + namesCount.
nameProportion("John"));         System.
out.
println("Fraction of Marys: " + namesCount.
nameProportion("Mary"));     }
}
				aW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwoKY2xhc3MgUHJvYmxlbSB7CiAgICBwcml2YXRlIGludCBjb3VudDsKICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50czsKCiAgICBwdWJsaWMgUHJvYmxlbSgpIHsKICAgICAgICB0aGlzLmNvdW50cyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBhZGROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgSW50ZWdlciBuYW1lQ291bnQgPSBjb3VudHMuZ2V0KG5hbWUpOwogICAgICAgIGlmIChuYW1lQ291bnQgPT0gbnVsbCkgewogICAgICAgICAgICBuYW1lQ291bnQgPSAxOwogICAgICAgICAgICBjb3VudHMucHV0KG5hbWUsIG5hbWVDb3VudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291bnRzLnB1dChuYW1lLCBuYW1lQ291bnQgKyAxKTsKICAgICAgICB9CiAgICAgICAgY291bnQrKzsKICAgIH0KCiAgICBwdWJsaWMgZG91YmxlIG5hbWVQcm9wb3J0aW9uKFN0cmluZyBuYW1lKSB7CiAgICAgICAgcmV0dXJuIGNvdW50cy5nZXQobmFtZSkgLyAoZG91YmxlKSBjb3VudDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgUHJvYmxlbSBuYW1lc0NvdW50ID0gbmV3IFByb2JsZW0oKTsKCiAgICAgICAgbmFtZXNDb3VudC5hZGROYW1lKCJKYW1lcyIpOwogICAgICAgIG5hbWVzQ291bnQuYWRkTmFtZSgiSm9obiIpOwogICAgICAgIG5hbWVzQ291bnQuYWRkTmFtZSgiTWFyeSIpOwogICAgICAgIG5hbWVzQ291bnQuYWRkTmFtZSgiTWFyeSIpOwoKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZyYWN0aW9uIG9mIEpvaG5zOiAiICsgbmFtZXNDb3VudC5uYW1lUHJvcG9ydGlvbigiSm9obiIpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZyYWN0aW9uIG9mIE1hcnlzOiAiICsgbmFtZXNDb3VudC5uYW1lUHJvcG9ydGlvbigiTWFyeSIpKTsKICAgIH0KfQ==