import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		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;
    Map<String,String> codeMap;
    Map<String,Integer> catMap;

    public ProductCategoryMap()
    {
        prodMap = new HashMap<>();
        codeMap = new HashMap<>();
        catMap = new HashMap<>();
    }

    public void put(String category, String region, int code)
    {
        if(!prodMap.containsKey(category))
        {
            prodMap.put(category, new ArrayList<>());
        }
        prodMap.get(category).add(region);

        catMap.put(category+region, code);
        codeMap.put(region+code, category);
    }

    public String getCategory(String country, int catId)
    {
        return codeMap.get(country+catId);
    }
    
    public int getCategoryId(String category, String country)
    {
    	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);
    }
}

