import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
{
ProductCategoryMap pcMap = new ProductCategoryMap();
pcMap.put("Electronic", "ph", 144);
pcMap.put("Electronic", "jp", 120);
List<String> availability = pcMap.getAvailability("Electronic");
System.
out.
println("category Electronic is available in the following countries: "+String.
join(", ",availability
));
int catId_ph = pcMap.getCategoryId("Electronic", "ph");
System.
out.
println("['Electronic', 'ph'] -> "+catId_ph
);
int catId_jp = pcMap.getDestCatId("ph", "jp", catId_ph);
System.
out.
println("['ph', '"+catId_jp
+"'] -> "+catId_jp
); }
}
class ProductCategoryMap
{
Map
<String,List
<String
>> prodMap
;
public ProductCategoryMap()
{
prodMap = new HashMap<>();
codeMap = new HashMap<>();
catMap = new HashMap<>();
}
{
if(!prodMap.containsKey(category))
{
prodMap.put(category, new ArrayList<>());
}
prodMap.get(category).add(region);
catMap.put(category+region, code);
codeMap.put(region+code, category);
}
{
return codeMap.get(country+catId);
}
{
return catMap.get(category+country);
}
public int getDestCatId
(String srcCountry,
String destCountry,
int srcCatId
) {
String category
= getCategory
(srcCountry, srcCatId
); return getCategoryId(category, destCountry);
}
public List
<String
> getAvailability
(String category
) {
return prodMap.get(category);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJUHJvZHVjdENhdGVnb3J5TWFwIHBjTWFwID0gbmV3IFByb2R1Y3RDYXRlZ29yeU1hcCgpOwoJCQoJCXBjTWFwLnB1dCgiRWxlY3Ryb25pYyIsICJwaCIsIDE0NCk7CgkJcGNNYXAucHV0KCJFbGVjdHJvbmljIiwgImpwIiwgMTIwKTsKCQkKCQlMaXN0PFN0cmluZz4gYXZhaWxhYmlsaXR5ID0gcGNNYXAuZ2V0QXZhaWxhYmlsaXR5KCJFbGVjdHJvbmljIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJjYXRlZ29yeSBFbGVjdHJvbmljIGlzIGF2YWlsYWJsZSBpbiB0aGUgZm9sbG93aW5nIGNvdW50cmllczogIitTdHJpbmcuam9pbigiLCAiLGF2YWlsYWJpbGl0eSkpOwoJCQoJCWludCBjYXRJZF9waCA9IHBjTWFwLmdldENhdGVnb3J5SWQoIkVsZWN0cm9uaWMiLCAicGgiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIlsnRWxlY3Ryb25pYycsICdwaCddIC0+ICIrY2F0SWRfcGgpOwoJCQoJCWludCBjYXRJZF9qcCA9IHBjTWFwLmdldERlc3RDYXRJZCgicGgiLCAianAiLCBjYXRJZF9waCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJbJ3BoJywgJyIrY2F0SWRfanArIiddIC0+ICIrY2F0SWRfanApOwoJfQp9CgpjbGFzcyBQcm9kdWN0Q2F0ZWdvcnlNYXAKewogICAgTWFwPFN0cmluZyxMaXN0PFN0cmluZz4+IHByb2RNYXA7CiAgICBNYXA8U3RyaW5nLFN0cmluZz4gY29kZU1hcDsKICAgIE1hcDxTdHJpbmcsSW50ZWdlcj4gY2F0TWFwOwoKICAgIHB1YmxpYyBQcm9kdWN0Q2F0ZWdvcnlNYXAoKQogICAgewogICAgICAgIHByb2RNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgY29kZU1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICBjYXRNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgcHV0KFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIHJlZ2lvbiwgaW50IGNvZGUpCiAgICB7CiAgICAgICAgaWYoIXByb2RNYXAuY29udGFpbnNLZXkoY2F0ZWdvcnkpKQogICAgICAgIHsKICAgICAgICAgICAgcHJvZE1hcC5wdXQoY2F0ZWdvcnksIG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICB9CiAgICAgICAgcHJvZE1hcC5nZXQoY2F0ZWdvcnkpLmFkZChyZWdpb24pOwoKICAgICAgICBjYXRNYXAucHV0KGNhdGVnb3J5K3JlZ2lvbiwgY29kZSk7CiAgICAgICAgY29kZU1hcC5wdXQocmVnaW9uK2NvZGUsIGNhdGVnb3J5KTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldENhdGVnb3J5KFN0cmluZyBjb3VudHJ5LCBpbnQgY2F0SWQpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvZGVNYXAuZ2V0KGNvdW50cnkrY2F0SWQpOwogICAgfQogICAgCiAgICBwdWJsaWMgaW50IGdldENhdGVnb3J5SWQoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgY291bnRyeSkKICAgIHsKICAgIAlyZXR1cm4gY2F0TWFwLmdldChjYXRlZ29yeStjb3VudHJ5KTsKICAgIH0KCiAgICBwdWJsaWMgaW50IGdldERlc3RDYXRJZChTdHJpbmcgc3JjQ291bnRyeSwgU3RyaW5nIGRlc3RDb3VudHJ5LCBpbnQgc3JjQ2F0SWQpCiAgICB7CiAgICAgICAgU3RyaW5nIGNhdGVnb3J5ID0gZ2V0Q2F0ZWdvcnkoc3JjQ291bnRyeSwgc3JjQ2F0SWQpOwogICAgICAgIHJldHVybiBnZXRDYXRlZ29yeUlkKGNhdGVnb3J5LCBkZXN0Q291bnRyeSk7CiAgICB9CgogICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRBdmFpbGFiaWxpdHkoU3RyaW5nIGNhdGVnb3J5KQogICAgewogICAgICAgIHJldHVybiBwcm9kTWFwLmdldChjYXRlZ29yeSk7CiAgICB9Cn0KCg==