Program: 190595
Project: 190595
Buggy source:
/** 
 * This method contains collection of ending patterns, found in data. These patterns are meant for using on the beginning of the unsegmented grammar string. Thus,e.g., if there was no plural-only nouns with ending -ļas, then there is no rule for processing such words (at least in most cases).
 * @param lemma is used for grammar parsing.
 */
private String processBeginingWithPatterns(String gramText,String lemma){
  gramText=gramText.trim();
  int newBegin=-1;
  for (  SimpleRule s : simpleRulesDirect) {
    if (newBegin != -1)     break;
    newBegin=s.applyDirect(gramText,lemma,paradigm,flags);
  }
  for (  SimpleRule s : simpleRulesOptHyperns) {
    if (newBegin != -1)     break;
    newBegin=s.applyOptHyperns(gramText,lemma,paradigm,flags);
  }
  if (newBegin == -1) {
    if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(2,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(2);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 3) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 3) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 3) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 1) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 1) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 1) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(1,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(1);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
  }
  if (newBegin == -1)   newBegin=esEndingPluralGenUEndingFemRules(gramText,lemma);
  if (newBegin == -1) {
    if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(25);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(7);
        paradigm.add(8);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str"))       paradigm.add(2);
 else       if (lemma.matches("String_Node_Str"))       paradigm.add(1);
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(2);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(1);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(3);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(3);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(7);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(7);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 1) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(1);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(2);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(2);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(14);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(13);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(14);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(13);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(13);
        paradigm.add(14);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(13);
        paradigm.add(14);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(25);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 4) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altLemmas.put(0,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 3) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altLemmas.put(0,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
  }
  if (newBegin == -1)   newBegin=aEndingMascRules(gramText,lemma);
  if (newBegin == -1)   newBegin=uEndingMascRules(gramText,lemma);
  if (newBegin == -1)   newBegin=uEndingFemRules(gramText,lemma);
  if (newBegin == -1)   newBegin=singleEndingOnlyRules(gramText,lemma);
  if (newBegin > 0 && newBegin <= gramText.length())   gramText=gramText.substring(newBegin);
 else   if (newBegin > gramText.length()) {
    System.err.printf("String_Node_Str",lemma,gramText,newBegin);
  }
  if (gramText.matches("String_Node_Str"))   gramText=gramText.substring(1);
  return gramText;
}

Fixed version (ground truth):
/** 
 * This method contains collection of ending patterns, found in data. These patterns are meant for using on the beginning of the unsegmented grammar string. Thus,e.g., if there was no plural-only nouns with ending -ļas, then there is no rule for processing such words (at least in most cases).
 * @param lemma is used for grammar parsing.
 */
private String processBeginingWithPatterns(String gramText,String lemma){
  gramText=gramText.trim();
  int newBegin=-1;
  for (  SimpleRule s : simpleRulesDirect) {
    if (newBegin != -1)     break;
    newBegin=s.applyDirect(gramText,lemma,paradigm,flags);
  }
  for (  SimpleRule s : simpleRulesOptHyperns) {
    if (newBegin != -1)     break;
    newBegin=s.applyOptHyperns(gramText,lemma,paradigm,flags);
  }
  if (newBegin == -1) {
    if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(2,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(2);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 2) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 3) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 3) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 3) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(3,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(3);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (lemma.endsWith("String_Node_Str") && gramText.startsWith("String_Node_Str" + lemma.substring(0,lemma.length() - 1) + "String_Node_Str")) {
      newBegin=("String_Node_Str" + lemma.substring(0,lemma.length() - 1) + "String_Node_Str").length();
      Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 1) + "String_Node_Str");
      HashSet<String> altParams=new HashSet<String>();
      altParams.add("String_Node_Str");
      altLemmas.put(1,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
      paradigm.add(1);
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
  }
  if (newBegin == -1)   newBegin=esEndingPluralGenUEndingFemRules(gramText,lemma);
  if (newBegin == -1) {
    if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(25);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(7);
        paradigm.add(8);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str"))       paradigm.add(2);
 else       if (lemma.matches("String_Node_Str"))       paradigm.add(1);
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(2);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(1);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(3);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(3);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(7);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(7);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(11);
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(9);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 1) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(1);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(2);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 2) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altParams.add("String_Node_Str");
        altLemmas.put(9,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(2);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(14);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(13);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        paradigm.add(14);
        flags.add("String_Node_Str");
      }
 else       if (lemma.matches("String_Node_Str")) {
        paradigm.add(13);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(13);
        paradigm.add(14);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(13);
        paradigm.add(14);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(25);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.startsWith("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else       if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
      flags.add("String_Node_Str");
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        paradigm.add(30);
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.endsWith("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 4) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altLemmas.put(0,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
 else     if (gramText.matches("String_Node_Str")) {
      newBegin="String_Node_Str".length();
      if (lemma.matches("String_Node_Str")) {
        Lemma altLemma=new Lemma(lemma.substring(0,lemma.length() - 3) + "String_Node_Str");
        HashSet<String> altParams=new HashSet<String>();
        altParams.add("String_Node_Str");
        altLemmas.put(0,new Tuple<Lemma,HashSet<String>>(altLemma,altParams));
        paradigm.add(0);
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
        flags.add("String_Node_Str");
      }
 else {
        System.err.printf("String_Node_Str",lemma);
        newBegin=0;
      }
    }
  }
  if (newBegin == -1)   newBegin=aEndingMascRules(gramText,lemma);
  if (newBegin == -1)   newBegin=uEndingMascRules(gramText,lemma);
  if (newBegin == -1)   newBegin=uEndingFemRules(gramText,lemma);
  if (newBegin == -1)   newBegin=singleEndingOnlyRules(gramText,lemma);
  if (newBegin > 0 && newBegin <= gramText.length())   gramText=gramText.substring(newBegin);
 else   if (newBegin > gramText.length()) {
    System.err.printf("String_Node_Str",lemma,gramText,newBegin);
  }
  if (gramText.matches("String_Node_Str"))   gramText=gramText.substring(1);
  return gramText;
}