/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static Map
< String , List
< String
>> inverse
( Map
< String , String
> m
) {
Map
< String , List
< String
>> r
= new HashMap
<> ( ) ; {
if ( r.get ( s) == null )
r.put ( s, new ArrayList<> ( ) ) ;
r.get ( s) .add ( k) ;
}
return r;
}
{
Map
< String , String
> map
= new HashMap
<> ( ) ; map.put ( "Clyde" , "blue" ) ;
map.put ( "Sarah" , "blue" ) ;
map.put ( "Fred" , "green" ) ;
map.put ( "Derp" , "green" ) ;
map.put ( "Barney" , "yellow" ) ;
System .
out .
println ( "Original:\n {" ) ; for ( String key
: map.
keySet ( ) ) System .
out .
println ( "\t " + key
+ " : " + map.
get ( key
) ) ; System .
out .
println ( "}\n \n Inverse:\n {" ) ; Map
< String , List
< String
>> results
= inverse
( map
) ;
for ( String key
: results.
keySet ( ) ) {
System .
out .
println ( "\t " + key
+ " : " + results.
get ( key
) ) ; }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBpbnZlcnNlKE1hcDxTdHJpbmcsIFN0cmluZz4gbSkKICAgIHsKICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHIgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgZm9yIChTdHJpbmcgayA6IG0ua2V5U2V0KCkpCiAgICAgICAgewogICAgICAgICAgICBTdHJpbmcgcyA9IG0uZ2V0KGspOwogICAgICAgICAgICBpZiAoci5nZXQocykgPT0gbnVsbCkKICAgICAgICAgICAgICAgIHIucHV0KHMsIG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICAgICAgci5nZXQocykuYWRkKGspOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjsKICAgIH0KCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCU1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIG1hcC5wdXQoIkNseWRlIiwgImJsdWUiKTsKICAgICAgICBtYXAucHV0KCJTYXJhaCIsICJibHVlIik7CiAgICAgICAgbWFwLnB1dCgiRnJlZCIsICJncmVlbiIpOwogICAgICAgIG1hcC5wdXQoIkRlcnAiLCAiZ3JlZW4iKTsKICAgICAgICBtYXAucHV0KCJCYXJuZXkiLCAieWVsbG93Iik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiT3JpZ2luYWw6XG57Iik7CiAgICAgICAgZm9yIChTdHJpbmcga2V5IDogbWFwLmtleVNldCgpKQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGtleSArICIgOiAiICsgbWFwLmdldChrZXkpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIn1cblxuSW52ZXJzZTpcbnsiKTsKICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHJlc3VsdHMgPSBpbnZlcnNlKG1hcCk7CgogICAgICAgIGZvciAoU3RyaW5nIGtleSA6IHJlc3VsdHMua2V5U2V0KCkpCiAgICAgICAgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGtleSArICIgOiAiICsgcmVzdWx0cy5nZXQoa2V5KSk7CiAgICAgICAgfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigifSIpOwoJfQp9