commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tobr...@apache.org
Subject cvs commit: jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/language TestNysiis.java
Date Mon, 03 Feb 2003 15:48:15 GMT
tobrien     2003/02/03 07:48:14

  Modified:    codec    TODO
               codec/src/test/org/apache/commons/codec TestAll.java
  Added:       codec/src/java/org/apache/commons/codec/language Nysiis.java
               codec/src/test/org/apache/commons/codec/language
                        TestNysiis.java
  Log:
  Added Nysiis implementation
  
  Revision  Changes    Path
  1.3       +4 -1      jakarta-commons-sandbox/codec/TODO
  
  Index: TODO
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/codec/TODO,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TODO	3 Feb 2003 15:08:10 -0000	1.2
  +++ TODO	3 Feb 2003 15:48:14 -0000	1.3
  @@ -27,14 +27,17 @@
   
   * Integrate Patches: 
   ** Patch submitted by Iulian Musat for Base64 
  -** Add Nysiis implementation from KyleBurton 
   
   * DoubleMetaphone
   ** Modify DoubleMetaphone implementation - make it thread safe(r).
   ** Figure out why algorithm fails to properly code "bryce" and "maurice".
   
  +* Nysiis
  +** Modify Nysiis implementation - make it thread safe(r).
  +
   ** DONE 
   
  +2/3/03 - TOB - Added Nysiis code and tests from Kyle Burton
   2/3/03 - TOB - Added DoubleMetaphone code and tests from Kyle Burton
   2/2/03 - TOB - "language" package created to hold language and phonetic encodings 
   2/2/03 - TOB - All CRLF issues resolved in codec 
  
  
  
  1.1                  jakarta-commons-sandbox/codec/src/java/org/apache/commons/codec/language/Nysiis.java
  
  Index: Nysiis.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Commons" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Turbine", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.commons.codec.language;
  
  import org.apache.commons.codec.Encoder;
  
  /**
   * A class to generate phonetic codings based on the New York State
   * Identification and Intelligence System algorithm.  This module is based on
   * the code from the Perl module available from CPAN, which derives from an
   * implementation by Ben Kennedy.
   *
   * @see http://www.nist.gov/dads/HTML/nysiis.html
   * @see http://search.cpan.org/search?query=nysiis&mode=all
   *
   * @see Atack, J., and F. Bateman. 1992 .
   *   <i>"Matchmaker, matchmaker, make me a match"</i> : a general
   *   computer-based matching program for historical researc.
   *   Historical Methods 25: 53-65.
   *
   * @version $Revision: 1.1 $
   * @author <a href="mortis@voicenet.com">Kyle R. Burton</a>
   */
  public final class Nysiis implements Encoder {
  
    /** Enable/disable internal debugging. */
    private boolean debug = false;
  
    /** The name to be encoded. */
    private StringBuffer word  = null;
  
    /**
     * Static version of encode.  This method was originaly created to allow this
     * encoder to be used as a Java Stored Procedure in Oracle.
     * @param word the data to encode.
     * @return the encoded string.
     */
    public static String sencode( String word ) {
      Nysiis ny = new Nysiis();
      return ny.encode(word);
    }
  
    /**
     * Encode the given string using the Nysiis phonetic encoding algorithm.
     * @param  String originalWord
     * @return String - the encoded word
     */
    public String encode( String originalWord ) {
  
        if( originalWord != null &&
  	  originalWord.length() > 0 ) {
  	  word = new StringBuffer( originalWord.toUpperCase() );
        } else {
  	  return "";
        }
      char first;
  
      // strip any trailing S or Zs
      while(word.toString().endsWith("S") || word.toString().endsWith("Z")) {
        word.deleteCharAt( word.length() - 1 );
      }
  
      replaceFront( "MAC", "MC" );
      replaceFront( "PF",  "F" );
      replaceEnd(   "IX",  "IC" );
      replaceEnd(   "EX",  "EC" );
  
      replaceEnd(   "YE",  "Y" );
      replaceEnd(   "EE",  "Y" );
      replaceEnd(   "IE",  "Y" );
  
      replaceEnd(   "DT",  "D" );
      replaceEnd(   "RT",  "D" );
      replaceEnd(   "RD",  "D" );
  
  
      replaceEnd(   "NT",  "N" );
      replaceEnd(   "ND",  "N" );
  
      // .EV => .EF
      replaceAll(   "EV", "EF", 1 );
  
      first = word.charAt(0);
  
  
      // replace all vowels with 'A'
      // word = replaceAll(   word, "A",  "A" );
      replaceAll(   "E",  "A" );
      replaceAll(   "I",  "A" );
      replaceAll(   "O",  "A" );
      replaceAll(   "U",  "A" );
  
      // remove any 'W' that follows a vowel
      replaceAll(   "AW", "A" );
  
      replaceAll(   "GHT", "GT" );
      replaceAll(   "DG", "G" );
      replaceAll(   "PH", "F" );
  
      replaceAll(   "AH", "A", 1 );
      replaceAll(   "HA", "A", 1 );
  
      replaceAll(   "KN", "N" );
      replaceAll(   "K", "C" );
  
      replaceAll(   "M", "N", 1 );
      replaceAll(   "Q", "G", 1 );
  
      replaceAll(   "SH",  "S" );
      replaceAll(   "SCH", "S" );
  
      replaceAll(   "YW",  "Y" );
  
      replaceAll(   "Y",  "A", 1, word.length() - 2 );
  
      replaceAll(   "WR",  "R" );
  
      replaceAll(   "Z",  "S", 1 );
  
      replaceEnd(   "AY",  "Y" );
  
      while(word.toString().endsWith("A")) {
        word.deleteCharAt( word.length() - 1 );
      }
  
      reduceDuplicates();
  
      if(  'A' == first
        || 'E' == first
        || 'I' == first
        || 'O' == first
        || 'U' == first ) {
        word.deleteCharAt(0);
        word.insert(0,first);
      }
   
      return word.toString();
    }
  
    /**
     * Traverse the string reducing duplicated characters.
     */
    private void reduceDuplicates() {
      char lastChar;
      StringBuffer newWord = new StringBuffer();
  
      if(0 == word.length()) {
        return;
      }
  
      lastChar = word.charAt(0);
      newWord.append(lastChar);
      for(int i = 1; i < word.length(); ++i) {
        if(lastChar != word.charAt(i)) {
          newWord.append(word.charAt(i));
        }
        lastChar = word.charAt(i);
      }
  
      log("reduceDuplicates: " + word);
  
      word = newWord;
    }
  
    /**
     * Replace all occurances of the given pattern in the string to be encoded
     * with the given replacement.
     * @param find the sequence to locate
     * @param repl the string to replace it with
     */
    private void replaceAll( String find, 
                             String repl ) {
      replaceAll(find,repl,0,-1);
    }
  
    /**
     * Replace all occurances of the given pattern in the string to be encoded
     * with the given replacement, beginning at the given staring position.
     * @param find the sequence to locate
     * @param repl the string to replace it with
     * @param startPos the position to begin at
     */
    private void replaceAll( String find, 
                             String repl,
                             int startPos ) {
      replaceAll(find,repl,startPos,-1);
    }
  
    /**
     * Replace all occurances of the given pattern in the string to be encoded
     * with the given replacement, beginning at the given staring position up to
     * the given end position.
     * @param find the sequence to locate
     * @param repl the string to replace it with
     * @param startPos the position to begin at
     * @param endPos the position to stop at
     */
    private void replaceAll( String find, 
                             String repl,
                             int startPos,
                             int endPos ) {
      int pos = word.toString().indexOf(find,startPos);
  
      /*
      log("Nysiis.replaceAll(): "
        + "pos: "      + pos      + " "
        + "word: "     + word     + " "
        + "find: "     + find     + " "
        + "repl: "     + repl     + " "
        + "startPos: " + startPos + " "
        + "endPos: "   + endPos   + " "
      );
      */
  
      if(-1 == endPos) {
        endPos = word.length() - 1;
      }
  
      while(-1 != pos) {
        if(-1 != endPos && pos > endPos) {
          log("stopping pos > endPos: " + pos + ":" + endPos);
          break;
        }
        // log("word[" + word.length() + "]: " + word);
        // log("deleting at: " + pos + ", " + (find.length() - 1));
  
        word.delete( pos, pos + find.length() );
        // log("del[" + word.length() + "]:  " + word);
  
        word.insert( pos, repl );
        // log("ins[" + word.length() + "]:  " + word);
  
        pos = word.toString().indexOf(find);
        // log("new pos[" + word.length() + "]: " + pos);
        log("replaceAll[" + find + "," + repl + "]: " + word);
      }
      
    }
  
    /**
     * If the encoded string begins with the given find string, replace it.
     * @param find the prefix to test for
     * @param repl the replacement to substitue
     */
    private void replaceFront( String find, 
                               String repl ) {
      if(word.toString().startsWith(find)) {
        word.delete( 0, find.length() );
        word.insert( 0, repl );
        log("replaceFront[" + find + "]: " + word);
      }
    }
  
    /**
     * If the encoded string ends with the given find string, replace it.
     * @param find the suffix to test for
     * @param repl the replacement to substitue
     */
    private void replaceEnd( String find, 
                             String repl ) {
      if(word.toString().endsWith(find)) {
        word.delete( word.length() - find.length(), word.length() );
        word.append(repl);
        log("replaceEnd[" + find + "]: " + word);
      }
    }
  
    /**
     * Logging statement controlled by the debug member.
     * @param msg the message to optionaly log.
     */
    private void log( String msg ) {
      if(!debug) { return; }
      System.out.println(msg);
      System.out.flush();
    }
  
    /**
     * Check if the two strings encode to the same primary or alternate encodings
     * using the Nysiis algorithm.
     * @param s1
     * @param s2
     * @return true/false
     */
    public static boolean isEncodeEqual( String s1, String s2 ) {
      return sencode( s1 ).equals( sencode( s2 ) );
    }
  }
  
  
  
  
  
  1.4       +6 -4      jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/TestAll.java
  
  Index: TestAll.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/TestAll.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestAll.java	3 Feb 2003 15:00:12 -0000	1.3
  +++ TestAll.java	3 Feb 2003 15:48:14 -0000	1.4
  @@ -62,6 +62,7 @@
   package org.apache.commons.codec;
   
   import org.apache.commons.codec.language.TestDoubleMetaphone;
  +import org.apache.commons.codec.language.TestNysiis;
   
   import junit.framework.Test;
   import junit.framework.TestCase;
  @@ -84,6 +85,7 @@
           suite.addTest(TestSoundex.suite());
           suite.addTest(TestRefinedSoundex.suite());
   	suite.addTest(TestDoubleMetaphone.suite());
  +	suite.addTest(TestNysiis.suite());
           return suite;
       }
           
  
  
  
  1.1                  jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/language/TestNysiis.java
  
  Index: TestNysiis.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/language/TestNysiis.java,v 1.1 2003/02/03 15:48:14 tobrien Exp $
   * $Revision: 1.1 $
   * $Date: 2003/02/03 15:48:14 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  package org.apache.commons.codec.language;
  
  import org.apache.commons.codec.Encoder;
  import org.apache.commons.codec.TestEncoder;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  /**
   * @version $Revision: 1.1 $ $Date: 2003/02/03 15:48:14 $
   * @author <a href="mailto:mortis@voicenet.com">Kyle R. Burton</a>
   */
  public class TestNysiis extends TestEncoder {
  
    public TestNysiis(String name) {
      super(name);
    }
  
    public static Test suite() {
      return (new TestSuite(TestNysiis.class));
    }
  
    public void setUp() throws Exception {        
      super.setUp();
      _encoder = new Nysiis();
    }
  
    public void tearDown() throws Exception {
      super.tearDown();
      _encoder = null;
    }
  
    protected Encoder makeEncoder() {
      return new Nysiis();
    }
    
    // ------------------------------------------------------------------------
  
    public void testNysiis() {
      Nysiis nysiis = new Nysiis();
      for(int i = 0; i < words.length; ++i) {
        assertEquals(
          "encoding: " + words[i],
          encodings[i],
          _encoder.encode(words[i])
        );
      }
    }
  
    public void testIsNysiisEqual() {
      // need good examples of when two strings should encode to 
      // the same values...
    }
  
    private Nysiis _encoder = null;
    private String [] words = {
        "Aarhus",
        "Aaron",
        "Ababa",
        "aback",
        "abaft",
        "abandon",
        "abandoned",
        "abandoning",
        "abandonment",
        "abandons",
        "abase",
        "abased",
        "abasement",
        "abasements",
        "abases",
        "abash",
        "abashed",
        "abashes",
        "abashing",
        "abasing",
        "abate",
        "abated",
        "abatement",
        "abatements",
        "abater",
        "abates",
        "abating",
        "Abba",
        "abbe",
        "abbey",
        "abbeys",
        "abbot",
        "abbots",
        "Abbott",
        "abbreviate",
        "abbreviated",
        "abbreviates",
        "abbreviating",
        "abbreviation",
        "abbreviations",
        "Abby",
        "abdomen",
        "abdomens",
        "abdominal",
        "abduct",
        "abducted",
        "abduction",
        "abductions",
        "abductor",
        "abductors",
        "abducts",
        "Abe",
        "abed",
        "Abel",
        "Abelian",
        "Abelson",
        "Aberdeen",
        "Abernathy",
        "aberrant",
        "aberration",
        "aberrations",
        "abet",
        "abets",
        "abetted",
        "abetter",
        "abetting",
        "abeyance",
        "abhor",
        "abhorred",
        "abhorrent",
        "abhorrer",
        "abhorring",
        "abhors",
        "abide",
        "abided",
        "abides",
        "abiding",
        "Abidjan",
        "Abigail",
        "Abilene",
        "abilities",
        "ability",
        "abject",
        "abjection",
        "abjections",
        "abjectly",
        "abjectness",
        "abjure",
        "abjured",
        "abjures",
        "abjuring",
        "ablate",
        "ablated",
        "ablates",
        "ablating",
        "ablation",
        "ablative",
        "ablaze",
        "able",
        "abler",
        "ablest",
        "ably",
        "Abner",
        "abnormal",
        "abnormalities",
        "abnormality",
        "abnormally",
        "Abo",
        "aboard",
        "abode",
        "abodes",
        "abolish",
        "abolished",
        "abolisher",
        "abolishers",
        "abolishes",
        "abolishing",
        "abolishment",
        "abolishments",
        "abolition",
        "abolitionist",
        "abolitionists",
        "abominable",
        "abominate",
        "aboriginal",
        "aborigine",
        "aborigines",
        "abort",
        "aborted",
        "aborting",
        "abortion",
        "abortions",
        "abortive",
        "abortively",
        "aborts",
        "Abos",
        "abound",
        "abounded",
        "abounding",
        "abounds",
        "about",
        "above",
        "aboveboard",
        "aboveground",
        "abovementioned",
        "abrade",
        "abraded",
        "abrades",
        "abrading",
        "Abraham",
        "Abram",
        "Abrams",
        "Abramson",
        "abrasion",
        "abrasions",
        "abrasive",
        "abreaction",
        "abreactions",
        "abreast",
        "abridge",
        "abridged",
        "abridges",
        "abridging",
        "abridgment",
        "abroad",
        "abrogate",
        "abrogated",
        "abrogates",
        "abrogating",
        "abrupt",
        "abruptly",
        "abruptness",
        "abscess",
        "abscessed",
        "abscesses",
        "abscissa",
        "abscissas",
        "abscond",
        "absconded",
        "absconding",
        "absconds",
        "absence",
        "absences",
        "absent",
        "absented",
        "absentee",
        "absenteeism",
        "absentees",
        "absentia",
        "absenting",
        "absently",
        "absentminded",
        "absents",
        "absinthe",
        "absolute",
        "absolutely",
        "absoluteness",
        "absolutes",
        "absolution",
        "absolve",
        "absolved",
        "absolves",
        "absolving",
        "absorb",
        "absorbed",
        "absorbency",
        "absorbent",
        "absorber",
        "absorbing",
        "absorbs",
        "absorption",
        "absorptions",
        "absorptive",
        "abstain",
        "abstained",
        "abstainer",
        "abstaining",
        "abstains",
        "abstention",
        "abstentions",
        "abstinence",
        "abstract",
        "abstracted",
        "abstracting",
        "abstraction",
        "abstractionism",
        "abstractionist",
        "abstractions",
        "abstractly",
        "abstractness",
        "abstractor",
        "abstractors",
        "abstracts",
        "abstruse",
        "abstruseness",
        "absurd",
        "absurdities",
        "absurdity",
        "absurdly",
        "Abu",
        "abundance",
        "abundant",
        "abundantly",
        "abuse",
        "abused",
        "abuses",
        "abusing",
        "abusive",
        "abut",
        "abutment",
        "abuts",
        "abutted",
        "abutter",
        "abutters",
        "abutting",
        "abysmal",
        "abysmally",
        "abyss",
        "abysses",
        "Abyssinia",
        "Abyssinian",
        "Abyssinians",
        "acacia",
        "academia",
        "academic",
        "academically",
        "academics",
        "academies",
        "academy",
        "Acadia",
        "Acapulco",
        "accede",
        "acceded",
        "accedes",
        "accelerate",
        "accelerated",
        "accelerates",
        "accelerating",
        "acceleration",
        "accelerations",
        "accelerator",
        "accelerators",
        "accelerometer",
        "accelerometers",
        "accent",
        "accented",
        "accenting",
        "accents",
        "accentual",
        "accentuate",
        "accentuated",
        "accentuates",
        "accentuating",
        "accentuation",
        "accept",
        "acceptability",
        "acceptable",
        "acceptably",
        "acceptance",
        "acceptances",
        "accepted",
        "accepter",
        "accepters",
        "accepting",
        "acceptor",
        "acceptors",
        "accepts",
        "access",
        "accessed",
        "accesses",
        "accessibility",
        "accessible",
        "accessibly",
        "accessing",
        "accession",
        "accessions",
        "accessories",
        "accessors",
        "accessory",
        "accident",
        "accidental",
        "accidentally",
        "accidently",
        "accidents",
        "acclaim",
        "acclaimed",
        "acclaiming",
        "acclaims",
        "acclamation",
        "acclimate",
        "acclimated",
        "acclimates",
        "acclimating",
        "acclimatization",
        "acclimatized",
        "accolade",
        "accolades",
        "accommodate",
        "accommodated",
        "accommodates",
        "accommodating",
        "accommodation",
        "accommodations",
        "accompanied",
        "accompanies",
        "accompaniment",
        "accompaniments",
        "accompanist",
        "accompanists",
        "accompany",
        "accompanying",
        "accomplice",
        "accomplices",
        "accomplish",
        "accomplished",
        "accomplisher",
        "accomplishers",
        "accomplishes",
        "accomplishing",
        "accomplishment",
        "accomplishments",
        "accord",
        "accordance",
        "accorded",
        "accorder",
        "accorders",
        "according",
        "accordingly",
        "accordion",
        "accordions",
        "accords",
        "accost",
        "accosted",
        "accosting",
        "accosts",
        "account",
        "accountability",
        "accountable",
        "accountably",
        "accountancy",
        "accountant",
        "accountants",
        "accounted",
        "accounting",
        "accounts",
        "Accra",
        "accredit",
        "accreditation",
        "accreditations",
        "accredited",
        "accretion",
        "accretions",
        "accrue",
        "accrued",
        "accrues",
        "accruing",
        "acculturate",
        "acculturated",
        "acculturates",
        "acculturating",
        "acculturation",
        "accumulate",
        "accumulated",
        "accumulates",
        "accumulating",
        "accumulation",
        "accumulations",
        "accumulator",
        "accumulators",
        "accuracies",
        "accuracy",
        "accurate",
        "accurately",
        "accurateness",
        "accursed",
        "accusal",
        "accusation",
        "accusations",
        "accusative",
        "accuse",
        "accused",
        "accuser",
        "accuses",
        "accusing",
        "accusingly",
        "accustom",
        "accustomed",
        "accustoming",
        "accustoms",
        "ace",
        "aces",
        "acetate",
        "acetone",
        "acetylene",
        "Achaean",
        "Achaeans",
        "ache",
        "ached",
        "aches",
        "achievable",
        "achieve",
        "achieved",
        "achievement",
        "achievements",
        "achiever",
        "achievers",
        "achieves",
        "achieving",
        "Achilles",
        "aching",
        "acid",
        "acidic",
        "acidities",
        "acidity",
        "acidly",
        "acids",
        "acidulous",
        "Ackerman",
        "Ackley",
        "acknowledge",
        "acknowledgeable",
        "acknowledged",
        "acknowledgement",
        "acknowledgements",
        "acknowledger",
        "acknowledgers",
        "acknowledges",
        "acknowledging",
        "acknowledgment",
        "acknowledgments",
        "acme",
        "acne",
        "acolyte",
        "acolytes",
        "acorn",
        "acorns",
        "acoustic",
        "acoustical",
        "acoustically",
        "acoustician",
        "acoustics",
        "acquaint",
        "acquaintance",
        "acquaintances",
        "acquainted",
        "acquainting",
        "acquaints",
        "acquiesce",
        "acquiesced",
        "acquiescence",
        "acquiescent",
        "acquiesces",
        "acquiescing",
        "acquirable",
        "acquire",
        "acquired",
        "acquires",
        "acquiring",
        "acquisition",
        "acquisitions",
        "acquisitive",
        "acquisitiveness",
        "acquit",
        "acquits",
        "acquittal",
        "acquitted",
        "acquitter",
        "acquitting",
        "acre",
        "acreage",
        "acres",
        "acrid",
        "acrimonious",
        "acrimony",
        "acrobat",
        "acrobatic",
        "acrobatics",
        "acrobats",
        "acronym",
        "acronyms",
        "acropolis",
        "across",
        "acrylic",
        "act",
        "Acta",
        "Actaeon",
        "acted",
        "acting",
        "actinium",
        "actinometer",
        "actinometers",
        "action",
        "actions",
        "activate",
        "activated",
        "activates",
        "activating",
        "activation",
        "activations",
        "activator",
        "activators",
        "active",
        "actively",
        "activism",
        "activist",
        "activists",
        "activities",
        "activity",
        "Acton",
        "actor",
        "actors",
        "actress",
        "actresses",
        "Acts",
        "actual",
        "actualities",
        "actuality",
        "actualization",
        "actually",
        "actuals",
        "actuarial",
        "actuarially",
        "actuate",
        "actuated",
        "actuates",
        "actuating",
        "actuator",
        "actuators",
        "acuity",
        "acumen",
        "acute",
        "acutely",
        "acuteness",
        "acyclic",
        "acyclically",
        "ad",
        "Ada",
        "adage",
        "adages",
        "adagio",
        "adagios",
        "Adair",
        "Adam",
        "adamant",
        "adamantly",
        "Adams",
        "Adamson",
        "adapt",
        "adaptability",
        "adaptable",
        "adaptation",
        "adaptations",
        "adapted",
        "adapter",
        "adapters",
        "adapting",
        "adaptive",
        "adaptively",
        "adaptor",
        "adaptors",
        "adapts",
        "add",
        "added",
        "addend",
        "addenda",
        "addendum",
        "adder",
        "adders",
        "addict",
        "addicted",
        "addicting",
        "addiction",
        "addictions",
        "addicts",
        "adding",
        "Addis",
        "Addison",
        "addition",
        "additional",
        "additionally",
        "additions",
        "additive",
        "additives",
        "additivity",
        "address",
        "addressability",
        "addressable",
        "addressed",
        "addressee",
        "addressees",
        "addresser",
        "addressers",
        "addresses",
        "addressing",
        "Addressograph",
        "adds",
        "adduce",
        "adduced",
        "adduces",
        "adducible",
        "adducing",
        "adduct",
        "adducted",
        "adducting",
        "adduction",
        "adductor",
        "adducts",
        "Adelaide",
        "Adele",
        "Adelia",
        "Aden",
        "adept",
        "adequacies",
        "adequacy",
        "adequate",
        "adequately",
        "adhere",
        "adhered",
        "adherence",
        "adherent",
        "adherents",
        "adherer",
        "adherers",
        "adheres",
        "adhering",
        "adhesion",
        "adhesions",
        "adhesive",
        "adhesives",
        "adiabatic",
        "adiabatically",
        "adieu",
        "Adirondack",
        "Adirondacks",
        "adjacency",
        "adjacent",
        "adjective",
        "adjectives",
        "adjoin",
        "adjoined",
        "adjoining",
        "adjoins",
        "adjourn",
        "adjourned",
        "adjourning",
        "adjournment",
        "adjourns",
        "adjudge",
        "adjudged",
        "adjudges",
        "adjudging",
        "adjudicate",
        "adjudicated",
        "adjudicates",
        "adjudicating",
        "adjudication",
        "adjudications",
        "adjunct",
        "adjuncts",
        "adjure",
        "adjured",
        "adjures",
        "adjuring",
        "adjust",
        "adjustable",
        "adjustably",
        "adjusted",
        "adjuster",
        "adjusters",
        "adjusting",
        "adjustment",
        "adjustments",
        "adjustor",
        "adjustors",
        "adjusts",
        "adjutant",
        "adjutants",
        "Adkins",
        "Adler",
        "Adlerian",
        "administer",
        "administered",
        "administering",
        "administerings",
        "administers",
        "administrable",
        "administrate",
        "administration",
        "administrations",
        "administrative",
        "administratively",
        "administrator",
        "administrators",
        "admirable",
        "admirably",
        "admiral",
        "admirals",
        "admiralty",
        "admiration",
        "admirations",
        "admire",
        "admired",
        "admirer",
        "admirers",
        "admires",
        "admiring",
        "admiringly",
        "admissibility",
        "admissible",
        "admission",
        "admissions",
        "admit",
        "admits",
        "admittance",
        "admitted",
        "admittedly",
        "admitter",
        "admitters",
        "admitting",
        "admix",
        "admixed",
        "admixes",
        "admixture",
        "admonish",
        "admonished",
        "admonishes",
        "admonishing",
        "admonishment",
        "admonishments",
        "admonition",
        "admonitions",
        "ado",
        "adobe",
        "adolescence",
        "adolescent",
        "adolescents",
        "Adolph",
        "Adolphus",
        "Adonis",
        "adopt",
        "adopted",
        "adopter",
        "adopters",
        "adopting",
        "adoption",
        "adoptions",
        "adoptive",
        "adopts",
        "adorable",
        "adoration",
        "adore",
        "adored",
        "adores",
        "adorn",
        "adorned",
        "adornment",
        "adornments",
        "adorns",
        "adrenal",
        "adrenaline",
        "Adrian",
        "Adriatic",
        "Adrienne",
        "adrift",
        "adroit",
        "adroitness",
        "ads",
        "adsorb",
        "adsorbed",
        "adsorbing",
        "adsorbs",
        "adsorption",
        "adulate",
        "adulating",
        "adulation",
        "adult",
        "adulterate",
        "adulterated",
        "adulterates",
        "adulterating",
        "adulterer",
        "adulterers",
        "adulterous",
        "adulterously",
        "adultery",
        "adulthood",
        "adults",
        "adumbrate",
        "adumbrated",
        "adumbrates",
        "adumbrating",
        "adumbration",
        "advance",
        "advanced",
        "advancement",
        "advancements",
        "advances",
        "advancing",
        "advantage",
        "advantaged",
        "advantageous",
        "advantageously",
        "advantages",
        "advent",
        "adventist",
        "adventists",
        "adventitious",
        "adventure",
        "adventured",
        "adventurer",
        "adventurers",
        "adventures",
        "adventuring",
        "adventurous",
        "adverb",
        "adverbial",
        "adverbs",
        "adversaries",
        "adversary",
        "adverse",
        "adversely",
        "adversities",
        "adversity",
        "advert",
        "advertise",
        "advertised",
        "advertisement",
        "advertisements",
        "advertiser",
        "advertisers",
        "advertises",
        "advertising",
        "advice",
        "advisability",
        "advisable",
        "advisably",
        "advise",
        "advised",
        "advisedly",
        "advisee",
        "advisees",
        "advisement",
        "advisements",
        "adviser",
        "advisers",
        "advises",
        "advising",
        "advisor",
        "advisors",
        "advisory",
        "advocacy",
        "advocate",
        "advocated",
        "advocates",
        "advocating",
        "Aegean",
        "aegis",
        "Aeneas",
        "Aeneid",
        "Aeolus",
        "aerate",
        "aerated",
        "aerates",
        "aerating",
        "aeration",
        "aerator",
        "aerators",
        "aerial",
        "aerials",
        "aeroacoustic",
        "Aerobacter",
        "aerobic",
        "aerobics",
        "aerodynamic",
        "aerodynamics",
        "aeronautic",
        "aeronautical",
        "aeronautics",
        "aerosol",
        "aerosolize",
        "aerosols",
        "aerospace",
        "Aeschylus",
        "Aesop",
        "aesthetic",
        "aesthetically",
        "aesthetics",
        "afar",
        "affable",
        "affair",
        "affairs",
        "affect",
        "affectation",
        "affectations",
        "affected",
        "affecting",
        "affectingly",
        "affection",
        "affectionate",
        "affectionately",
        "affections",
        "affective",
        "affects",
        "afferent",
        "affianced",
        "affidavit",
        "affidavits",
        "affiliate",
        "affiliated",
        "affiliates",
        "affiliating",
        "affiliation",
        "affiliations",
        "affinities",
        "affinity",
        "affirm",
        "affirmation",
        "affirmations",
        "affirmative",
        "affirmatively",
        "affirmed",
        "affirming",
        "affirms",
        "affix",
        "affixed",
        "affixes",
        "affixing",
        "afflict",
        "afflicted",
        "afflicting",
        "affliction",
        "afflictions",
        "afflictive",
        "afflicts",
        "affluence",
        "affluent",
        "afford",
        "affordable",
        "afforded",
        "affording",
        "affords",
        "affricate",
        "affricates",
        "affright",
        "affront",
        "affronted",
        "affronting",
        "affronts",
        "Afghan",
        "Afghanistan",
        "Afghans",
        "aficionado",
        "afield",
        "afire",
        "aflame",
        "afloat",
        "afoot",
        "afore",
        "aforementioned",
        "aforesaid",
    };
    private String [] encodings = {
        "AR",
        "ARAN",
        "ABAB",
        "ABAC",
        "ABAFT",
        "ABANDAN",
        "ABANDANAD",
        "ABANDANANG",
        "ABANDANAN",
        "ABANDAN",
        "ABAS",
        "ABASAD",
        "ABASANAN",
        "ABASANAN",
        "ABAS",
        "ABAS",
        "ABASAD",
        "ABAS",
        "ABASANG",
        "ABASANG",
        "ABAT",
        "ABATAD",
        "ABATANAN",
        "ABATANAN",
        "ABATAR",
        "ABAT",
        "ABATANG",
        "AB",
        "AB",
        "ABY",
        "ABY",
        "ABAT",
        "ABAT",
        "ABAT",
        "ABRAFAT",
        "ABRAFATAD",
        "ABRAFAT",
        "ABRAFATANG",
        "ABRAFATAN",
        "ABRAFATAN",
        "ABY",
        "ABDANAN",
        "ABDANAN",
        "ABDANANAL",
        "ABDACT",
        "ABDACTAD",
        "ABDACTAN",
        "ABDACTAN",
        "ABDACTAR",
        "ABDACTAR",
        "ABDACT",
        "AB",
        "ABAD",
        "ABAL",
        "ABALAN",
        "ABALSAN",
        "ABARDAN",
        "ABARNATHY",
        "ABARAN",
        "ABARATAN",
        "ABARATAN",
        "ABAT",
        "ABAT",
        "ABATAD",
        "ABATAR",
        "ABATANG",
        "ABANC",
        "ABAR",
        "ABARAD",
        "ABARAN",
        "ABARAR",
        "ABARANG",
        "ABAR",
        "ABAD",
        "ABADAD",
        "ABAD",
        "ABADANG",
        "ABADJAN",
        "ABAGAL",
        "ABALAN",
        "ABALATY",
        "ABALATY",
        "ABJACT",
        "ABJACTAN",
        "ABJACTAN",
        "ABJACTLY",
        "ABJACTN",
        "ABJAR",
        "ABJARAD",
        "ABJAR",
        "ABJARANG",
        "ABLAT",
        "ABLATAD",
        "ABLAT",
        "ABLATANG",
        "ABLATAN",
        "ABLATAV",
        "ABLAS",
        "ABL",
        "ABLAR",
        "ABLAST",
        "ABLY",
        "ABNAR",
        "ABNARNAL",
        "ABNARNALATY",
        "ABNARNALATY",
        "ABNARNALY",
        "AB",
        "ABAD",
        "ABAD",
        "ABAD",
        "ABALAS",
        "ABALASAD",
        "ABALASAR",
        "ABALASAR",
        "ABALAS",
        "ABALASANG",
        "ABALASNAN",
        "ABALASNAN",
        "ABALATAN",
        "ABALATANAST",
        "ABALATANAST",
        "ABANANABL",
        "ABANANAT",
        "ABARAGANAL",
        "ABARAGAN",
        "ABARAGAN",
        "ABAD",
        "ABARTAD",
        "ABARTANG",
        "ABARTAN",
        "ABARTAN",
        "ABARTAV",
        "ABARTAVALY",
        "ABAD",
        "AB",
        "ABAN",
        "ABANDAD",
        "ABANDANG",
        "ABAN",
        "ABAT",
        "ABAV",
        "ABAVABAD",
        "ABAVAGRAN",
        "ABAVANANTANAD",
        "ABRAD",
        "ABRADAD",
        "ABRAD",
        "ABRADANG",
        "ABRAN",
        "ABRAN",
        "ABRAN",
        "ABRANSAN",
        "ABRASAN",
        "ABRASAN",
        "ABRASAV",
        "ABRACTAN",
        "ABRACTAN",
        "ABRAST",
        "ABRAG",
        "ABRAGAD",
        "ABRAG",
        "ABRAGANG",
        "ABRAGNAN",
        "ABRAD",
        "ABRAGAT",
        "ABRAGATAD",
        "ABRAGAT",
        "ABRAGATANG",
        "ABRAPT",
        "ABRAPTLY",
        "ABRAPTN",
        "ABSC",
        "ABSCASAD",
        "ABSCAS",
        "ABSCAS",
        "ABSCAS",
        "ABSCAN",
        "ABSCANDAD",
        "ABSCANDANG",
        "ABSCAN",
        "ABSANC",
        "ABSANC",
        "ABSAN",
        "ABSANTAD",
        "ABSANTY",
        "ABSANTASN",
        "ABSANTY",
        "ABSANT",
        "ABSANTANG",
        "ABSANTLY",
        "ABSANTNANDAD",
        "ABSAN",
        "ABSANT",
        "ABSALAT",
        "ABSALATALY",
        "ABSALATAN",
        "ABSALAT",
        "ABSALATAN",
        "ABSALV",
        "ABSALVAD",
        "ABSALV",
        "ABSALVANG",
        "ABSARB",
        "ABSARBAD",
        "ABSARBANCY",
        "ABSARBAN",
        "ABSARBAR",
        "ABSARBANG",
        "ABSARB",
        "ABSARPTAN",
        "ABSARPTAN",
        "ABSARPTAV",
        "ABSTAN",
        "ABSTANAD",
        "ABSTANAR",
        "ABSTANANG",
        "ABSTAN",
        "ABSTANTAN",
        "ABSTANTAN",
        "ABSTANANC",
        "ABSTRACT",
        "ABSTRACTAD",
        "ABSTRACTANG",
        "ABSTRACTAN",
        "ABSTRACTANASN",
        "ABSTRACTANAST",
        "ABSTRACTAN",
        "ABSTRACTLY",
        "ABSTRACTN",
        "ABSTRACTAR",
        "ABSTRACTAR",
        "ABSTRACT",
        "ABSTRAS",
        "ABSTRASAN",
        "ABSAD",
        "ABSARDATY",
        "ABSARDATY",
        "ABSARDLY",
        "AB",
        "ABANDANC",
        "ABANDAN",
        "ABANDANTLY",
        "ABAS",
        "ABASAD",
        "ABAS",
        "ABASANG",
        "ABASAV",
        "ABAT",
        "ABATNAN",
        "ABAT",
        "ABATAD",
        "ABATAR",
        "ABATAR",
        "ABATANG",
        "ABASNAL",
        "ABASNALY",
        "ABY",
        "ABAS",
        "ABASAN",
        "ABASANAN",
        "ABASANAN",
        "ACAC",
        "ACADAN",
        "ACADANAC",
        "ACADANACALY",
        "ACADANAC",
        "ACADANY",
        "ACADANY",
        "ACAD",
        "ACAPALC",
        "ACAD",
        "ACADAD",
        "ACAD",
        "ACALARAT",
        "ACALARATAD",
        "ACALARAT",
        "ACALARATANG",
        "ACALARATAN",
        "ACALARATAN",
        "ACALARATAR",
        "ACALARATAR",
        "ACALARANATAR",
        "ACALARANATAR",
        "ACAN",
        "ACANTAD",
        "ACANTANG",
        "ACAN",
        "ACANTAL",
        "ACANTAT",
        "ACANTATAD",
        "ACANTAT",
        "ACANTATANG",
        "ACANTATAN",
        "ACAPT",
        "ACAPTABALATY",
        "ACAPTABL",
        "ACAPTABLY",
        "ACAPTANC",
        "ACAPTANC",
        "ACAPTAD",
        "ACAPTAR",
        "ACAPTAR",
        "ACAPTANG",
        "ACAPTAR",
        "ACAPTAR",
        "ACAPT",
        "AC",
        "ACASAD",
        "ACAS",
        "ACASABALATY",
        "ACASABL",
        "ACASABLY",
        "ACASANG",
        "ACASAN",
        "ACASAN",
        "ACASARY",
        "ACASAR",
        "ACASARY",
        "ACADAN",
        "ACADANTAL",
        "ACADANTALY",
        "ACADANTLY",
        "ACADAN",
        "ACLAN",
        "ACLANAD",
        "ACLANANG",
        "ACLAN",
        "ACLANATAN",
        "ACLANAT",
        "ACLANATAD",
        "ACLANAT",
        "ACLANATANG",
        "ACLANATASATAN",
        "ACLANATASAD",
        "ACALAD",
        "ACALAD",
        "ACANADAT",
        "ACANADATAD",
        "ACANADAT",
        "ACANADATANG",
        "ACANADATAN",
        "ACANADATAN",
        "ACANPANAD",
        "ACANPANY",
        "ACANPANANAN",
        "ACANPANANAN",
        "ACANPANAST",
        "ACANPANAST",
        "ACANPANY",
        "ACANPANANG",
        "ACANPLAC",
        "ACANPLAC",
        "ACANPLAS",
        "ACANPLASAD",
        "ACANPLASAR",
        "ACANPLASAR",
        "ACANPLAS",
        "ACANPLASANG",
        "ACANPLASNAN",
        "ACANPLASNAN",
        "ACAD",
        "ACARDANC",
        "ACARDAD",
        "ACARDAR",
        "ACARDAR",
        "ACARDANG",
        "ACARDANGLY",
        "ACARDAN",
        "ACARDAN",
        "ACAD",
        "ACAST",
        "ACASTAD",
        "ACASTANG",
        "ACAST",
        "ACAN",
        "ACANTABALATY",
        "ACANTABL",
        "ACANTABLY",
        "ACANTANCY",
        "ACANTAN",
        "ACANTAN",
        "ACANTAD",
        "ACANTANG",
        "ACAN",
        "ACR",
        "ACRADAT",
        "ACRADATATAN",
        "ACRADATATAN",
        "ACRADATAD",
        "ACRATAN",
        "ACRATAN",
        "ACR",
        "ACRAD",
        "ACR",
        "ACRANG",
        "ACALTARAT",
        "ACALTARATAD",
        "ACALTARAT",
        "ACALTARATANG",
        "ACALTARATAN",
        "ACANALAT",
        "ACANALATAD",
        "ACANALAT",
        "ACANALATANG",
        "ACANALATAN",
        "ACANALATAN",
        "ACANALATAR",
        "ACANALATAR",
        "ACARACY",
        "ACARACY",
        "ACARAT",
        "ACARATALY",
        "ACARATAN",
        "ACARSAD",
        "ACASAL",
        "ACASATAN",
        "ACASATAN",
        "ACASATAV",
        "ACAS",
        "ACASAD",
        "ACASAR",
        "ACAS",
        "ACASANG",
        "ACASANGLY",
        "ACASTAN",
        "ACASTANAD",
        "ACASTANANG",
        "ACASTAN",
        "AC",
        "AC",
        "ACATAT",
        "ACATAN",
        "ACATALAN",
        "ACAN",
        "ACAN",
        "AC",
        "ACAD",
        "AC",
        "ACAFABL",
        "ACAF",
        "ACAFAD",
        "ACAFANAN",
        "ACAFANAN",
        "ACAFAR",
        "ACAFAR",
        "ACAF",
        "ACAFANG",
        "ACAL",
        "ACANG",
        "ACAD",
        "ACADAC",
        "ACADATY",
        "ACADATY",
        "ACADLY",
        "ACAD",
        "ACADAL",
        "ACARNAN",
        "ACLY",
        "ACNALAG",
        "ACNALAGABL",
        "ACNALAGAD",
        "ACNALAGANAN",
        "ACNALAGANAN",
        "ACNALAGAR",
        "ACNALAGAR",
        "ACNALAG",
        "ACNALAGANG",
        "ACNALAGNAN",
        "ACNALAGNAN",
        "ACN",
        "ACN",
        "ACALAT",
        "ACALAT",
        "ACARN",
        "ACARN",
        "ACASTAC",
        "ACASTACAL",
        "ACASTACALY",
        "ACASTACAN",
        "ACASTAC",
        "ACGAN",
        "ACGANTANC",
        "ACGANTANC",
        "ACGANTAD",
        "ACGANTANG",
        "ACGAN",
        "ACGASC",
        "ACGASCAD",
        "ACGASCANC",
        "ACGASCAN",
        "ACGASC",
        "ACGASCANG",
        "ACGARABL",
        "ACGAR",
        "ACGARAD",
        "ACGAR",
        "ACGARANG",
        "ACGASATAN",
        "ACGASATAN",
        "ACGASATAV",
        "ACGASATAVAN",
        "ACGAT",
        "ACGAT",
        "ACGATAL",
        "ACGATAD",
        "ACGATAR",
        "ACGATANG",
        "ACR",
        "ACRAG",
        "ACR",
        "ACRAD",
        "ACRANAN",
        "ACRANANY",
        "ACRABAT",
        "ACRABATAC",
        "ACRABATAC",
        "ACRABAT",
        "ACRANAN",
        "ACRANAN",
        "ACRAPAL",
        "ACR",
        "ACRALAC",
        "ACT",
        "ACT",
        "ACTAN",
        "ACTAD",
        "ACTANG",
        "ACTANAN",
        "ACTANANATAR",
        "ACTANANATAR",
        "ACTAN",
        "ACTAN",
        "ACTAVAT",
        "ACTAVATAD",
        "ACTAVAT",
        "ACTAVATANG",
        "ACTAVATAN",
        "ACTAVATAN",
        "ACTAVATAR",
        "ACTAVATAR",
        "ACTAV",
        "ACTAVALY",
        "ACTAVASN",
        "ACTAVAST",
        "ACTAVAST",
        "ACTAVATY",
        "ACTAVATY",
        "ACTAN",
        "ACTAR",
        "ACTAR",
        "ACTR",
        "ACTRAS",
        "ACT",
        "ACTAL",
        "ACTALATY",
        "ACTALATY",
        "ACTALASATAN",
        "ACTALY",
        "ACTAL",
        "ACTARAL",
        "ACTARALY",
        "ACTAT",
        "ACTATAD",
        "ACTAT",
        "ACTATANG",
        "ACTATAR",
        "ACTATAR",
        "ACATY",
        "ACANAN",
        "ACAT",
        "ACATALY",
        "ACATAN",
        "ACACLAC",
        "ACACLACALY",
        "AD",
        "AD",
        "ADAG",
        "ADAG",
        "ADAG",
        "ADAG",
        "ADAR",
        "ADAN",
        "ADANAN",
        "ADANANTLY",
        "ADAN",
        "ADANSAN",
        "ADAPT",
        "ADAPTABALATY",
        "ADAPTABL",
        "ADAPTATAN",
        "ADAPTATAN",
        "ADAPTAD",
        "ADAPTAR",
        "ADAPTAR",
        "ADAPTANG",
        "ADAPTAV",
        "ADAPTAVALY",
        "ADAPTAR",
        "ADAPTAR",
        "ADAPT",
        "AD",
        "ADAD",
        "ADAN",
        "ADAND",
        "ADANDAN",
        "ADAR",
        "ADAR",
        "ADACT",
        "ADACTAD",
        "ADACTANG",
        "ADACTAN",
        "ADACTAN",
        "ADACT",
        "ADANG",
        "AD",
        "ADASAN",
        "ADATAN",
        "ADATANAL",
        "ADATANALY",
        "ADATAN",
        "ADATAV",
        "ADATAV",
        "ADATAVATY",
        "ADR",
        "ADRASABALATY",
        "ADRASABL",
        "ADRASAD",
        "ADRASY",
        "ADRASY",
        "ADRASAR",
        "ADRASAR",
        "ADRAS",
        "ADRASANG",
        "ADRASAGRAF",
        "AD",
        "ADAC",
        "ADACAD",
        "ADAC",
        "ADACABL",
        "ADACANG",
        "ADACT",
        "ADACTAD",
        "ADACTANG",
        "ADACTAN",
        "ADACTAR",
        "ADACT",
        "ADALAD",
        "ADAL",
        "ADAL",
        "ADAN",
        "ADAPT",
        "ADAGACY",
        "ADAGACY",
        "ADAGAT",
        "ADAGATALY",
        "ADAR",
        "ADARAD",
        "ADARANC",
        "ADARAN",
        "ADARAN",
        "ADARAR",
        "ADARAR",
        "ADAR",
        "ADARANG",
        "ADASAN",
        "ADASAN",
        "ADASAV",
        "ADASAV",
        "ADABATAC",
        "ADABATACALY",
        "AD",
        "ADARANDAC",
        "ADARANDAC",
        "ADJACANCY",
        "ADJACAN",
        "ADJACTAV",
        "ADJACTAV",
        "ADJAN",
        "ADJANAD",
        "ADJANANG",
        "ADJAN",
        "ADJARN",
        "ADJARNAD",
        "ADJARNANG",
        "ADJARNAN",
        "ADJARN",
        "ADJAG",
        "ADJAGAD",
        "ADJAG",
        "ADJAGANG",
        "ADJADACAT",
        "ADJADACATAD",
        "ADJADACAT",
        "ADJADACATANG",
        "ADJADACATAN",
        "ADJADACATAN",
        "ADJANCT",
        "ADJANCT",
        "ADJAR",
        "ADJARAD",
        "ADJAR",
        "ADJARANG",
        "ADJAST",
        "ADJASTABL",
        "ADJASTABLY",
        "ADJASTAD",
        "ADJASTAR",
        "ADJASTAR",
        "ADJASTANG",
        "ADJASTNAN",
        "ADJASTNAN",
        "ADJASTAR",
        "ADJASTAR",
        "ADJAST",
        "ADJATAN",
        "ADJATAN",
        "ADCAN",
        "ADLAR",
        "ADLARAN",
        "ADNANASTAR",
        "ADNANASTARAD",
        "ADNANASTARANG",
        "ADNANASTARANG",
        "ADNANASTAR",
        "ADNANASTRABL",
        "ADNANASTRAT",
        "ADNANASTRATAN",
        "ADNANASTRATAN",
        "ADNANASTRATAV",
        "ADNANASTRATAVALY",
        "ADNANASTRATAR",
        "ADNANASTRATAR",
        "ADNARABL",
        "ADNARABLY",
        "ADNARAL",
        "ADNARAL",
        "ADNARALTY",
        "ADNARATAN",
        "ADNARATAN",
        "ADNAR",
        "ADNARAD",
        "ADNARAR",
        "ADNARAR",
        "ADNAR",
        "ADNARANG",
        "ADNARANGLY",
        "ADNASABALATY",
        "ADNASABL",
        "ADNASAN",
        "ADNASAN",
        "ADNAT",
        "ADNAT",
        "ADNATANC",
        "ADNATAD",
        "ADNATADLY",
        "ADNATAR",
        "ADNATAR",
        "ADNATANG",
        "ADNAC",
        "ADNAXAD",
        "ADNAX",
        "ADNAXTAR",
        "ADNANAS",
        "ADNANASAD",
        "ADNANAS",
        "ADNANASANG",
        "ADNANASNAN",
        "ADNANASNAN",
        "ADNANATAN",
        "ADNANATAN",
        "AD",
        "ADAB",
        "ADALASCANC",
        "ADALASCAN",
        "ADALASCAN",
        "ADALF",
        "ADALF",
        "ADAN",
        "ADAPT",
        "ADAPTAD",
        "ADAPTAR",
        "ADAPTAR",
        "ADAPTANG",
        "ADAPTAN",
        "ADAPTAN",
        "ADAPTAV",
        "ADAPT",
        "ADARABL",
        "ADARATAN",
        "ADAR",
        "ADARAD",
        "ADAR",
        "ADARN",
        "ADARNAD",
        "ADARNAN",
        "ADARNAN",
        "ADARN",
        "ADRANAL",
        "ADRANALAN",
        "ADRAN",
        "ADRATAC",
        "ADRAN",
        "ADRAFT",
        "ADRAT",
        "ADRATN",
        "AD",
        "ADSARB",
        "ADSARBAD",
        "ADSARBANG",
        "ADSARB",
        "ADSARPTAN",
        "ADALAT",
        "ADALATANG",
        "ADALATAN",
        "ADALT",
        "ADALTARAT",
        "ADALTARATAD",
        "ADALTARAT",
        "ADALTARATANG",
        "ADALTARAR",
        "ADALTARAR",
        "ADALTAR",
        "ADALTARASLY",
        "ADALTARY",
        "ADALTAD",
        "ADALT",
        "ADANBRAT",
        "ADANBRATAD",
        "ADANBRAT",
        "ADANBRATANG",
        "ADANBRATAN",
        "ADVANC",
        "ADVANCAD",
        "ADVANCANAN",
        "ADVANCANAN",
        "ADVANC",
        "ADVANCANG",
        "ADVANTAG",
        "ADVANTAGAD",
        "ADVANTAG",
        "ADVANTAGASLY",
        "ADVANTAG",
        "ADVAN",
        "ADVANTAST",
        "ADVANTAST",
        "ADVANTAT",
        "ADVANTAR",
        "ADVANTARAD",
        "ADVANTARAR",
        "ADVANTARAR",
        "ADVANTAR",
        "ADVANTARANG",
        "ADVANTAR",
        "ADVARB",
        "ADVARBAL",
        "ADVARB",
        "ADVARSARY",
        "ADVARSARY",
        "ADVARS",
        "ADVARSALY",
        "ADVARSATY",
        "ADVARSATY",
        "ADVAD",
        "ADVARTAS",
        "ADVARTASAD",
        "ADVARTASANAN",
        "ADVARTASANAN",
        "ADVARTASAR",
        "ADVARTASAR",
        "ADVARTAS",
        "ADVARTASANG",
        "ADVAC",
        "ADVASABALATY",
        "ADVASABL",
        "ADVASABLY",
        "ADVAS",
        "ADVASAD",
        "ADVASADLY",
        "ADVASY",
        "ADVASY",
        "ADVASANAN",
        "ADVASANAN",
        "ADVASAR",
        "ADVASAR",
        "ADVAS",
        "ADVASANG",
        "ADVASAR",
        "ADVASAR",
        "ADVASARY",
        "ADVACACY",
        "ADVACAT",
        "ADVACATAD",
        "ADVACAT",
        "ADVACATANG",
        "AGAN",
        "AG",
        "AN",
        "ANAD",
        "AL",
        "ARAT",
        "ARATAD",
        "ARAT",
        "ARATANG",
        "ARATAN",
        "ARATAR",
        "ARATAR",
        "ARAL",
        "ARAL",
        "ARACASTAC",
        "ARABACTAR",
        "ARABAC",
        "ARABAC",
        "ARADANANAC",
        "ARADANANAC",
        "ARANATAC",
        "ARANATACAL",
        "ARANATAC",
        "ARASAL",
        "ARASALAS",
        "ARASAL",
        "ARASPAC",
        "ASAL",
        "ASAP",
        "ASTATAC",
        "ASTATACALY",
        "ASTATAC",
        "AFAR",
        "AFABL",
        "AFAR",
        "AFAR",
        "AFACT",
        "AFACTATAN",
        "AFACTATAN",
        "AFACTAD",
        "AFACTANG",
        "AFACTANGLY",
        "AFACTAN",
        "AFACTANAT",
        "AFACTANATALY",
        "AFACTAN",
        "AFACTAV",
        "AFACT",
        "AFARAN",
        "AFANCAD",
        "AFADAVAT",
        "AFADAVAT",
        "AFALAT",
        "AFALATAD",
        "AFALAT",
        "AFALATANG",
        "AFALATAN",
        "AFALATAN",
        "AFANATY",
        "AFANATY",
        "AFARN",
        "AFARNATAN",
        "AFARNATAN",
        "AFARNATAV",
        "AFARNATAVALY",
        "AFARNAD",
        "AFARNANG",
        "AFARN",
        "AFAC",
        "AFAXAD",
        "AFAX",
        "AFAXANG",
        "AFLACT",
        "AFLACTAD",
        "AFLACTANG",
        "AFLACTAN",
        "AFLACTAN",
        "AFLACTAV",
        "AFLACT",
        "AFLANC",
        "AFLAN",
        "AFAD",
        "AFARDABL",
        "AFARDAD",
        "AFARDANG",
        "AFAD",
        "AFRACAT",
        "AFRACAT",
        "AFRAGT",
        "AFRAN",
        "AFRANTAD",
        "AFRANTANG",
        "AFRAN",
        "AFGAN",
        "AFGANASTAN",
        "AFGAN",
        "AFACANAD",
        "AFALD",
        "AFAR",
        "AFLAN",
        "AFLAT",
        "AFAT",
        "AFAR",
        "AFARANANTANAD",
        "AFARASAD",
    };
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message