You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by to...@apache.org on 2003/02/03 16:48:15 UTC
cvs commit: jakarta-commons-sandbox/codec/src/test/org/apache/commons/codec/language TestNysiis.java
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