public List<String> getMorphInfo(String s) {
   ArrayList<String> result = new ArrayList<String>();
   int[] ints = decoderEncoder.encodeToArray(revertWord(s));
   int ruleId = findRuleId(ints);
   for (Heuristic h : rules[rulesId[ruleId]]) {
     result.add(
         h.transformWord(s).append("|").append(grammarInfo[h.getFormMorphInfo()]).toString());
   }
   return result;
 }
 public List<String> getNormalForms(String s) {
   ArrayList<String> result = new ArrayList<String>();
   int[] ints = decoderEncoder.encodeToArray(revertWord(s));
   int ruleId = findRuleId(ints);
   boolean notSeenEmptyString = true;
   for (Heuristic h : rules[rulesId[ruleId]]) {
     String e = h.transformWord(s).toString();
     if (e.length() > 0) {
       result.add(e);
     } else if (notSeenEmptyString) {
       result.add(s);
       notSeenEmptyString = false;
     }
   }
   return result;
 }