import java.util.HashSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
class Ideone
{
public static void main
(String[] args
) {
Vocabulary v=new Vocabulary();
v.put("one","jeden");
v.put("one","jedyny");
v.display();
v.invert();
v.display();
v.invert();
v.display();
}
}
class Vocabulary
{
private HashMap
<String,HashSet
<String
>> map
=new HashMap
<String,HashSet
<String
>>(); {
HashSet<String> tmp=map.get(src);
if(tmp==null)
{
tmp=new HashSet<String>();
map.put(src,tmp);
}
tmp.add(dst);
}
public void display()
{
for(Map.
Entry<String,HashSet
<String
>> mr
:map.
entrySet()) {
System.
out.
print(mr.
getKey()+":"); for(String value
:mr.
getValue()) System.
out.
print(" "+value
); }
}
public void invert()
{
Vocabulary v=new Vocabulary();
for(Map.
Entry<String,HashSet
<String
>> mr
:map.
entrySet()) {
for(String value
:mr.
getValue()) v.
put(value,key
); }
map=v.map;
}
}
aW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwppbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CmltcG9ydCBqYXZhLnV0aWwuTWFwOwppbXBvcnQgamF2YS51dGlsLlNldDsKCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykKCXsKICAgICAgVm9jYWJ1bGFyeSB2PW5ldyBWb2NhYnVsYXJ5KCk7CiAgICAgIHYucHV0KCJvbmUiLCJqZWRlbiIpOwogICAgICB2LnB1dCgib25lIiwiamVkeW55Iik7CiAgICAgIHYuZGlzcGxheSgpOwogICAgICB2LmludmVydCgpOwogICAgICB2LmRpc3BsYXkoKTsKICAgICAgdi5pbnZlcnQoKTsKICAgICAgdi5kaXNwbGF5KCk7Cgl9Cn0KCmNsYXNzIFZvY2FidWxhcnkKICB7CiAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsSGFzaFNldDxTdHJpbmc+PiBtYXA9bmV3IEhhc2hNYXA8U3RyaW5nLEhhc2hTZXQ8U3RyaW5nPj4oKTsKICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBzcmMsU3RyaW5nIGRzdCkKICAgICB7CiAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0bXA9bWFwLmdldChzcmMpOwogICAgICBpZih0bXA9PW51bGwpIAogICAgICAgIHsKICAgICAgICAgdG1wPW5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICAgICAgbWFwLnB1dChzcmMsdG1wKTsKICAgICAgICB9CiAgICAgIHRtcC5hZGQoZHN0KTsKICAgICB9CiAgIHB1YmxpYyB2b2lkIGRpc3BsYXkoKQogICAgIHsKICAgICAgZm9yKE1hcC5FbnRyeTxTdHJpbmcsSGFzaFNldDxTdHJpbmc+PiBtcjptYXAuZW50cnlTZXQoKSkKICAgICAgICB7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQobXIuZ2V0S2V5KCkrIjoiKTsKICAgICAgICAgZm9yKFN0cmluZyB2YWx1ZTptci5nZXRWYWx1ZSgpKSBTeXN0ZW0ub3V0LnByaW50KCIgIit2YWx1ZSk7CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICAgIH0KICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgfQogICBwdWJsaWMgdm9pZCBpbnZlcnQoKQogICAgIHsKICAgICAgVm9jYWJ1bGFyeSB2PW5ldyBWb2NhYnVsYXJ5KCk7CiAgICAgIGZvcihNYXAuRW50cnk8U3RyaW5nLEhhc2hTZXQ8U3RyaW5nPj4gbXI6bWFwLmVudHJ5U2V0KCkpCiAgICAgICAgewogICAgICAgICBTdHJpbmcga2V5PW1yLmdldEtleSgpOwogICAgICAgICBmb3IoU3RyaW5nIHZhbHVlOm1yLmdldFZhbHVlKCkpIHYucHV0KHZhbHVlLGtleSk7CiAgICAgICAgfQogICAgICBtYXA9di5tYXA7CiAgICAgfQogIH0K