import java.util.HashMap;
import java.util.Map;

/**
 * An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations:
 *
 * a) it                      --> it    (no abbreviation)
 *
 *      1
 *      ↓
 * b) d|o|g                   --> d1g
 *
 *               1    1  1
 *      1---5----0----5--8
 *      ↓   ↓    ↓    ↓  ↓
 * c) i|nternationalizatio|n  --> i18n
 *
 *               1
 *      1---5----0
 *      ↓   ↓    ↓
 * d) l|ocalizatio|n          --> l10n
 * Assume you have a dictionary and given a word, find whether its abbreviation is unique in the dictionary. A word's abbreviation is unique if no other word from the dictionary has the same abbreviation.
 */
class ValidWordAbbr {
    public ValidWordAbbr() {}
    Map<String, String> seen = new HashMap<>();
    String abbr(String word) {
        if (word.length() < 3) {
            return word;
        } else {
            return "" + word.charAt(0) +
                    (word.length() - 2) +
                    word.charAt(word.length() - 1);
        }
    }
    public ValidWordAbbr(String[] dictionary) {
        for (String word : dictionary) {
            String abbr = abbr(word);
            if (seen.containsKey(abbr)) {
                if (!seen.get(abbr).isEmpty() && !seen.get(abbr).equals(word)) {
                    seen.put(abbr, "");
                }
            } else {
                seen.put(abbr, word);
            }
        }
    }
    public boolean isUnique(String word) {
        return !seen.containsKey(abbr(word)) || seen.get(abbr(word)).equals(word);
    }

    public void test() {
        ValidWordAbbr instance = new ValidWordAbbr(new String[]{ "hello" });
        System.out.println(instance.isUnique("hello"));
    }
}

